Làm cách nào để kiểm tra xem hai đối tượng ngày tháng khác nhau có cùng thông tin ngày tháng (có cùng ngày, tháng, năm ...) hay không? Tôi đã thử "==", "===" và .equals nhưng dường như không có tác dụng nào.
Câu trả lời:
a.setHours(0,0,0,0);
getTime()
trả về thời gian tính bằng mili giây, nên cả hai thời gian cũng có thể có sự khác biệt về mili giây. Trong giải pháp này, nó sẽ không hoạt động như mong đợi. Hãy thử sử dụngtoDateString()
Nếu bạn chỉ quan tâm đến việc kiểm tra xem các ngày có xảy ra trong cùng một ngày bất kể thời gian hay không thì bạn có thể sử dụng toDateString()
phương pháp để so sánh. Phương thức này chỉ trả về ngày mà không có thời gian:
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
}
Tôi đã sử dụng mã này:
Date.prototype.isSameDateAs = function(pDate) {
return (
this.getFullYear() === pDate.getFullYear() &&
this.getMonth() === pDate.getMonth() &&
this.getDate() === pDate.getDate()
);
}
Sau đó, bạn chỉ cần gọi nó như: if (aDate.isSameDateAs(otherDate)) { ... }
Nhập chuyển đổi thành số nguyên:
a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b; //true
Hellnar,
bạn có thể thử (xin thứ lỗi cho tên hàm :) - được sửa đổi theo giá trị của felix, thay vì getTime)
function isEqual(startDate, endDate) {
return endDate.valueOf() == startDate.valueOf();
}
sử dụng:
if(isEqual(date1, date2)){
// do something
}
có thể giúp bạn một phần của con đường đến đó.
Xem thêm:
'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'
Đối với sử dụng tốt hơn hỗ trợ ngày moment.js và isSame phương pháp
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 )
Một phương án thay thế một dòng đơn giản để xác định xem hai ngày có bằng nhau hay không, bỏ qua phần thời gian:
function isSameDate(a, b) {
return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
Nó xác định xem ngày a và b có chênh lệch nhau không quá một ngày và có cùng ngày trong tuần hay không.
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
>=
các giá trị được chuyển đổi thành số. Trong trường hợp==
các đối tượng được so sánh chính nó (và chỉa == a
đúng).