İ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:
a.setHours(0,0,0,0);
getTime()
getiri milisaniye cinsinden süre, saat her iki milisaniye fark var yanı olabilir. Bu çözümde beklendiği gibi çalışmayacaktır. DeneyintoDateString()
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
}
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)) { ... }
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'
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 )
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
>=
değerlerin sayılara çevrilmesi durumunda .==
Nesnelerin kendileri ile karşılaştırılması durumunda (ve sadecea == a
doğru olacaktır).