JavaScript - İki tarih arasındaki dakikaları alın


Yanıtlar:


204

Bu kodu kontrol edebilirsiniz:

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 =)");

veya var diffMins = Math.floor((...atma saniyeye Eğer yuvarlak dakikaya istemiyorsanız.


7
@philk, bu yüzden StackOverflow'a çok değer veriyorum. Birçok mesaj panosunda, cevap sadece bir köprüdür. Burada böyle olsaydı bu harika cevaba sahip olamazdık.
Andrew Neely

5
Bu yanıtı sınarken bir hata buldum: DiffHrs yanlış olabilir Date nesnesinde dakikaları ayarlarsanız. Örneğin, Noel "12-25-2015 03:55" ve bugün "12-25-2015 02:00" ise, hourDiff iki saattir. Bir saat olmalı.
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);fark 60 dakikadan fazla olduğunda çalışmıyor
kuncevic.dev

3
Bunun en az dakika boyunca düzgün çalışmadığını tekrarlamak. Örneğin, 62 dakikalık bir fark aldı ve yuvarlama nedeniyle, 2 dakikalık bir fark olduğunu düşündü.
Ürdün

6
soruyu doğru cevaplamaz, SADECE dakikadaki farkı hesaplamak yerine, fark gün, saat ve dakika bileşimi olarak hesaplanır ... böylece fark 1 gün 1 saat 1 dakika ise, 1 gösterecektir gün 1 saat 1 dakika, 1501 dakika yerine
Akhil Gupta

170

2 Date nesnesini çıkarmak, milisaniye cinsinden farkı verir, örn:

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

Math.absmutlak farkı kullanabilmek için kullanılır (böylece new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')aynı sonucu verir).

Sonucu 1000'e bölmek size saniye sayısını verir. Bunu 60'a bölmek size dakika sayısını verir. Tam dakikaya yuvarlamak için Math.floorveya tuşunu kullanın Math.ceil:

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

Bu örnekte sonuç 720 olacaktır


1
Yip. Ya (Math.floor(seconds/60))+':'+((seconds/60)%60)da kalan saniyelere de ihtiyacınız varsa bir şey
KooiInc

4
Bence bu daha iyi bir cevap, kabul edilen cevabın farkı 60 dakikadan fazla olduğunda farkı dakikaya dönüştürmediğini fark ettim
sani

Bu da yanlış. 12:00 00:00 ile aynı olamaz, çünkü bunlar 12 saatlik farktır ...
Davatar

1
@Davatar aynı olduklarını kim söyledi? sadece 12 saat - 0 saatin 0 saat - 12 saat ile aynı olduğunu belirtir.
Mark Baijens

Eski yanıt, ancak asla new Date(string)ISO-8601 biçim dizesinden başka bir biçim kullanmamalısınız . Bkz. Date.parse neden yanlış sonuçlar veriyor? veya yalnızca sayı kullanın (ör new Date(2011, 9, 9, 12, 0, 0). ayların 0 temelli olduğunu unutmayın).
Heretic Maymun

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
Bu güzel ve basit ve benim için çalıştı. Fikir iki tarih karşılaştırmak olduğu için bana göre daha mantıklı görünüyordu olsa da .getTime () tarihlerden kaldırdım. Teşekkürler.
Yos

Eski yanıt, ancak asla new Date(string)ISO-8601 biçim dizesinden başka bir biçim kullanmamalısınız . Bkz. Date.parse neden yanlış sonuçlar veriyor? veya yalnızca sayı kullanın (ör new Date(2011, 9, 9, 12, 0, 0). ayların 0 temelli olduğunu unutmayın).
Heretic Maymun

46

Bu hesaplamayı yapmak için basit bir işlev:

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

24

Bu iki tarih arasındaki farkı dakika cinsinden göstermelidir. Tarayıcınızda deneyin:

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 size "Bir aritmetik işlemin sol ve sağ tarafı" herhangi bir "," sayı "veya bir numaralandırma türü olmalıdır" hatasını verecektir. Hatayı önlemek için(currDate.getTime() - oldDate.getTime()) / 60000
Homer

12

Küçük sayılarla çalışmak isteyenler için

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

Bu sorun moment.js ile kolayca çözülebilir, örneğin:

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

İkinci parametre başka parametreler için değiştirilebilir, moment.js belgelerine bakın.

örneğin: "günler", "saatler", "dakikalar" vb.

http://momentjs.com/docs/

Moment.js için CDN'yi burada bulabilirsiniz:

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

Teşekkürler.

DÜZENLE:

mostDate ve minorDate bir moment tipi olmalıdır.


2

Düğümde benzer bir şeyi çözdüğüm eğlenceli.

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
*/

En eylem görebilirsiniz https://repl.it/@GioCirque/TimeSpan-Formatting


0

Aşağıdaki kod benim için çalıştı,

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

Aşağıdaki gibi yapabilirsiniz:

  1. Get difference of dates(Fark milisaniye cinsinden olacak)
  2. Dönüştürme millisecondsiçine minutesyanims/1000/60

Kod:

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.