JavaScript - Dapatkan menit di antara dua tanggal


156

Jika saya memiliki dua tanggal, bagaimana saya bisa menggunakan JavaScript untuk mendapatkan perbedaan antara dua tanggal dalam hitungan menit?


apakah mereka berkencan dengan objek atau hanya string? tolong beri contoh
situatin

Jawaban:


204

Anda dapat memeriksa kode ini:

var today = new Date();
var Christmas = new Date("2012-12-25");
var diffMs = (Christmas - today); // milliseconds between now & Christmas
var diffDays = Math.floor(diffMs / 86400000); // days
var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
alert(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Christmas 2009 =)");

atau var diffMins = Math.floor((...untuk membuang detik jika Anda tidak ingin membulatkan menit.


7
@ philk, itu sebabnya saya sangat menghargai StackOverflow. Di banyak papan pesan, jawabannya hanya hyperlink. Kami tidak akan memiliki jawaban hebat ini jika itu yang terjadi di sini.
Andrew Neely

5
Saya menemukan kesalahan saat menguji jawaban ini: DiffHrs mungkin salah Jika Anda mengatur menit di objek Tanggal. Misalnya jika Natal adalah "12-25-2015 03:55" dan hari ini adalah "12-25-2015 02:00" maka jam pasir adalah dua jam. Seharusnya satu jam.
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);tidak bekerja ketika perbedaannya lebih besar dari 60 menit
kuncevic.dev

3
Mengulangi bahwa ini TIDAK bekerja dengan baik, setidaknya selama beberapa menit. Sebagai contoh, butuh perbedaan 62 menit dan karena pembulatan, mengira itu perbedaan 2 menit.
Jordan

6
itu tidak menjawab pertanyaan dengan benar, alih-alih menghitung perbedaan dalam HANYA menit, perbedaannya dihitung sebagai gabungan dari hari, jam dan menit ... jadi jika perbedaannya adalah 1 hari 1 jam 1 menit, itu akan menunjukkan 1 hari 1 jam 1 menit, bukannya 1501 menit
Akhil Gupta

170

Mengurangi 2 objek Date memberi Anda perbedaan dalam milidetik, misalnya:

var diff = Math.abs(new Date('2011/10/09 12:00') - new Date('2011/10/09 00:00'));

Math.absdigunakan untuk dapat menggunakan perbedaan absolut (sehingga new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')memberikan hasil yang sama).

Membagi hasil dengan 1000 memberi Anda jumlah detik. Membagi dengan 60 memberi Anda jumlah menit. Untuk membulatkan ke seluruh menit, gunakan Math.flooratau Math.ceil:

var minutes = Math.floor((diff/1000)/60);

Dalam contoh ini hasilnya akan menjadi 720


1
Menyalak. Atau sesuatu seperti (Math.floor(seconds/60))+':'+((seconds/60)%60)jika Anda memerlukan detik yang tersisa juga
KooiInc

4
Saya pikir ini adalah jawaban yang lebih baik, saya perhatikan jawaban yang diterima gagal mengubah perbedaan menjadi menit ketika perbedaannya lebih dari 60 menit
sani

Ini juga salah. 12:00 tidak boleh sama dengan 00:00, karena ini adalah perbedaan 12 jam ...
Davatar

1
@Diskusikan siapa bilang mereka sama? dia hanya menyatakan bahwa 12 jam - 0 jam sama dengan 0 jam - 12 jam.
Mark Baijens

Jawaban lama, tetapi Anda tidak boleh menggunakan new Date(string)dengan format selain string format ISO-8601. Lihat Mengapa Date.parse memberikan hasil yang salah? , atau cukup gunakan angka (mis., new Date(2011, 9, 9, 12, 0, 0)ingat bulan berdasarkan 0).
Bidah Monyet

52
var startTime = new Date('2012/10/09 12:00'); 
var endTime = new Date('2013/10/09 12:00');
var difference = endTime.getTime() - startTime.getTime(); // This will give difference in milliseconds
var resultInMinutes = Math.round(difference / 60000);

2
Ini bagus dan sederhana dan bekerja untuk saya. Saya memang menghapus .getTime () dari tanggal meskipun sepertinya lebih logis bagi saya dilihat karena idenya adalah untuk membandingkan dua tanggal. Terima kasih.
Yos

Jawaban lama, tetapi Anda tidak boleh menggunakan new Date(string)dengan format selain string format ISO-8601. Lihat Mengapa Date.parse memberikan hasil yang salah? , atau cukup gunakan angka (mis., new Date(2011, 9, 9, 12, 0, 0)ingat bulan berdasarkan 0).
Bidah Monyet

46

Fungsi sederhana untuk melakukan perhitungan ini:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}

24

Itu harus menunjukkan perbedaan antara dua tanggal dalam hitungan menit. Cobalah di browser Anda:

const currDate = new Date('Tue Feb 13 2018 13:04:58 GMT+0200 (EET)')
const oldDate  = new Date('Tue Feb 13 2018 12:00:58 GMT+0200 (EET)')


(currDate - oldDate) / 60000 // 64

4
TypeScript akan memberi Anda kesalahan "Sisi kiri dan kanan dari operasi aritmatika harus bertipe 'any', 'number' atau tipe enum". Untuk menghindari kesalahan, lakukan(currDate.getTime() - oldDate.getTime()) / 60000
Homer

12

Bagi yang suka bekerja dengan angka kecil

const today = new Date();
const endDate = new Date(startDate.setDate(startDate.getDate() + 7));
const days = parseInt((endDate - today) / (1000 * 60 * 60 * 24));
const hours = parseInt(Math.abs(endDate - today) / (1000 * 60 * 60) % 24);
const minutes = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000 * 60) % 60);
const seconds = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000) % 60); 

9

Masalah ini diselesaikan dengan mudah dengan moment.js, seperti contoh ini:

var difference = mostDate.diff(minorDate, "minutes");

Parameter kedua dapat diubah untuk parameter lain, lihat dokumentasi moment.js.

mis: "hari", "jam", "menit", dll.

http://momentjs.com/docs/

CDN untuk moment.js tersedia di sini:

https://cdnjs.com/libraries/moment.js

Terima kasih.

EDIT:

mostDate dan minorDate harus menjadi tipe momen.


2

Inilah beberapa kesenangan yang saya miliki dalam menyelesaikan sesuatu yang serupa di simpul.

function formatTimeDiff(date1, date2) {
  return Array(3)
    .fill([3600, date1.getTime() - date2.getTime()])
    .map((v, i, a) => {
      a[i+1] = [a[i][0]/60, ((v[1] / (v[0] * 1000)) % 1) * (v[0] * 1000)];
      return `0${Math.floor(v[1] / (v[0] * 1000))}`.slice(-2);
    }).join(':');
}

const millis = 1000;
const utcEnd = new Date(1541424202 * millis);
const utcStart = new Date(1541389579 * millis);
const utcDiff = formatTimeDiff(utcEnd, utcStart);

console.log(`Dates:
  Start   : ${utcStart}
  Stop    : ${utcEnd}
  Elapsed : ${utcDiff}
  `);

/*
Outputs:

Dates:
  Start   : Mon Nov 05 2018 03:46:19 GMT+0000 (UTC)
  Stop    : Mon Nov 05 2018 13:23:22 GMT+0000 (UTC)
  Elapsed : 09:37:02
*/

Anda dapat melihatnya beraksi di https://repl.it/@GioCirque/TimeSpan-Formatting


0

Kode berikut ini berfungsi untuk saya,

function timeDiffCalc(dateNow,dateFuture) {
    var newYear1 = new Date(dateNow);
    var newYear2 = new Date(dateFuture);

        var dif = (newYear2 - newYear1);
        var dif = Math.round((dif/1000)/60);
        console.log(dif);

}

0

Anda dapat melakukannya sebagai berikut:

  1. Dapatkan difference of dates(Perbedaan akan dalam milidetik)
  2. Konversikan millisecondsmenjadi minutesmisms/1000/60

Kode:

let dateOne = new Date("2020-07-10");
let dateTwo = new Date("2020-07-11");

let msDifference =  dateTwo - dateOne;
let minutes = Math.floor(msDifference/1000/60);
console.log("Minutes between two dates =",minutes);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.