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?

John
sumber
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.

Darin Dimitrov
sumber
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

KooiInc
sumber
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);
MrGorki
sumber
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);
}
AlliterativeAlice
sumber
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
Purkhalo Alex
sumber
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); 
Rick
sumber
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.

Marco Blos
sumber
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

Gio Palacino
sumber
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);

}
Anusha Bhat
sumber
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);
Tanzeem Bhatti
sumber