İki Tarihin aynı tarih bilgisine sahip olup olmadığını kontrol etme


83

İki farklı tarih nesnesinin aynı tarih bilgisine sahip olup olmadığını nasıl kontrol edebilirim (aynı gün, ay, yıla sahip ...)? "==", "===" ve .equals'ı denedim ama hiçbiri işe yaramadı.

Yanıtlar:


139

Sen kullanabilirsiniz valueOf()ya getTime():

a = new Date(1995,11,17);
b = new Date(1995,11,17);

a.getTime() === b.getTime() // prints true

18
Çünkü >=değerlerin sayılara çevrilmesi durumunda . ==Nesnelerin kendileri ile karşılaştırılması durumunda (ve sadece a == adoğru olacaktır).
Felix Kling

8
Sadece bu çözümün tarihlerin yalnızca tarih bölümlerinden oluşmasını gerektirdiğini belirterek, bu soruya gelen birçok insanın farklı gereksinimleri olabilir ( örneğin, jsFiddle'da zaman bölümleri )
KyleMit

1
Bu nedenle, bunu kullanırken setHours işlevi sayesinde zaman bölümlerinin 0'a ayarlandığından emin olun :a.setHours(0,0,0,0);
Bobin

1
Milisaniye arasında herhangi bir fark varsa bu işe yaramayacaktır. Yana getTime()getiri milisaniye cinsinden süre, saat her iki milisaniye fark var yanı olabilir. Bu çözümde beklendiği gibi çalışmayacaktır. DeneyintoDateString()
Rehan Sattar

41

Tarihlerin, zamandan bağımsız olarak aynı gün içinde olup olmadığını kontrol etmekle ilgileniyorsanız, karşılaştırma yapmak için toDateString() yöntemi kullanabilirsiniz. Bu yöntem yalnızca zamanı olmayan tarihi döndürür:

var start = new Date('2015-01-28T10:00:00Z');
var end = new Date('2015-01-28T18:00:00Z');

if (start.toDateString() === end.toDateString()) {
  // Same day - maybe different times
} else {
  // Different day
}

40

Bu kodu kullandım:

Date.prototype.isSameDateAs = function(pDate) {
  return (
    this.getFullYear() === pDate.getFullYear() &&
    this.getMonth() === pDate.getMonth() &&
    this.getDate() === pDate.getDate()
  );
}

Sonra ona şöyle diyorsun: if (aDate.isSameDateAs(otherDate)) { ... }


GetTime () işlevini yalnızca iki kez kullanabilecekken neden bir düzine işlevi çalıştırasınız? Oh, saat, ay ve yıldaki farklılıkları görmezden gelmeyi mi düşünüyordun? Bu durumda, belki saat dilimi hususları önemli olmaya başlar?
ErikE

13
Soru "iki farklı tarih nesnesinin aynı tarih bilgisine sahip olması" olduğundan ve bu kod tam olarak bunu yapar: tarihleri, zamandan bağımsız olarak karşılaştırır
Tesadüfen

2
"Saat, dakika ve saniye farklarını görmezden gelmek" demek istemiştim
ErikE

14

Tamsayılara dönüştürme yazın:

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true

4
Unary

6

Hellnar,

deneyebilirsiniz (fonksiyon adı için bağışlayın :) - getTime yerine felix'in değerine göre değiştirilir)

function isEqual(startDate, endDate) {
    return endDate.valueOf() == startDate.valueOf();
}

kullanım:

if(isEqual(date1, date2)){
   // do something
}

sizi oraya götürür.

Ayrıca bakınız:

'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'


4

Daha iyi tarih desteği için moment.js ve isSame yöntemini kullanın

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-04-06').startOf('day');

console.log(starDate.isSame(endDate)); // false ( month is different )

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-03-06').startOf('day');

console.log(starDate.isSame(endDate)); // true ( year, month and day are the same )

3

onları çıkarın ve sıfırla karşılaştırın:

var date1 = new Date();
var date2 = new Date();

// tarihlerle bir şeyler yapın ...

(date1 - date2) ? alert("not equal") : alert("equal");

bir değişkene koymak için:

var datesAreSame = !(date1 - date2);

3

Zaman bölümünü göz ardı ederek iki tarihin eşit olup olmadığını belirlemek için basit bir tek satırlık alternatif:

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

A ve b tarihlerinin bir günden fazla farklı olup olmadığını ve haftanın aynı gününü paylaşıp paylaşmadığını belirler.

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

console.log(isSameDate(new Date(2017, 7, 21), new Date(2017, 7, 21))); //exact same date => true
console.log(isSameDate(new Date(2017, 7, 21, 23, 59, 59), new Date(2017, 7, 21))); //furthest same dates => true
console.log(isSameDate(new Date(2017, 7, 20, 23, 59, 59), new Date(2017, 7, 21))); //nearest different dates => false
console.log(isSameDate(new Date(2016, 7, 21), new Date(2017, 7, 21))); //different year => false
console.log(isSameDate(new Date(2017, 8, 21), new Date(2017, 7, 21))); //different month => false

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.