如何检查两个日期是否在同一天。我想出了这个解决方案,但也许有更好的方法来做到这一点:如何检查两个日期是否在同一日历日
var actualDate = new Date();
var isNotToday = dateToCheck.getDay() !== actualDate.getDay() || dateToCheck < actualDate - 24 * 60 * 60 * 1000;
如何检查两个日期是否在同一天。我想出了这个解决方案,但也许有更好的方法来做到这一点:如何检查两个日期是否在同一日历日
var actualDate = new Date();
var isNotToday = dateToCheck.getDay() !== actualDate.getDay() || dateToCheck < actualDate - 24 * 60 * 60 * 1000;
另一种选择是使用.toDateString()
函数将两个日期解析为字符串。函数格式输出到:“Wed Jul 28 1993.”然后你可以比较两个日期字符串。
actualDate.toDateString() === dateToCheck.toDateString()
// returns true if actualDate is same day as dateToCheck
这里有一个Plunker:
http://plnkr.co/edit/J5Dyn78TdDUzX82T0ypA
多由MDN:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString
现在就用你的头! –
猜猜这是最简单的单行答案! –
这将是最安全的检查日,月和年:
var isNotToday = dateToCheck.getDate() != actualDate.getDate()
|| dateToCheck.getMonth() != actualDate.getMonth()
|| dateToCheck.getFullYear() != actualDate.getFullYear();
这将确保你不会当涉及到夏令时和闰年时会变得古怪,否则会造成干扰。
我想他想检查两个日期是星期一,星期二,星期三等。 –
如何检查的同一天,一个月&年:所以他们都在午夜产生
var isSameDay = (dateToCheck.getDate() == actualDate.getDate()
&& dateToCheck.getMonth() == actualDate.getMonth()
&& dateToCheck.getFullYear() == actualDate.getFullYear())
这种方法似乎是最快的:https://jsperf.com/check-same-date – CoderPi
我会用这个进行多种操作,否则在我看来,接受的答案是更清洁一点。 –
不要创建时间日期对象。然后检查时代。
new Date('11/12/2012').getTime() === new Date('11/11/2012').getTime()
> false
new Date('11/12/2012').getTime() === new Date('11/12/2012').getTime()
> true
new Date('November 12, 2012').getTime() === new Date('11/12/2012').getTime()
> true
new Date('12 November, 2012').getTime() === new Date('11/12/2012').getTime()
> true
的日期只是需要由Date
对象可解析(我在Chrome 23.0.1271.17(正式版本159779)测试版),如果你没有传递时间,他们会在半夜产生。
如果你有时间,只需将它放在地板上并在午夜进行测试。
function getStartOfDay(aDate){
//returns the very beginning of the same day
return new Date(aDate.getTime() - aDate.getTime() % 86400000);
}
var aDate1 = getStartOfDay(new Date());
var aDate2 = getStartOfDay(new Date(1981, 7, 3));
var result = aDate1.getTime() === aDate2.getTime();
function isEqual(startDate, endDate) {
return endDate.valueOf() == startDate.valueOf();
}
var now =new Date();
var startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var endDate = new Date(2017, 0, 13)
var result = isEqual(startDate , endDate);
console.log(result);
使用startOf
方法实例Date
:
dateA.startOf('day').getTime() === dateB.startOf('day').getTime()
这里的方法:
Date.prototype.startOf = function(unit) {
var clone = new Date(this.getTime()), day;
/* */if (unit === 'second') clone.setMilliseconds(0);
else if (unit === 'minute') clone.setSeconds(0,0);
else if (unit === 'hour' ) clone.setMinutes(0,0,0);
else {
clone.setHours(0,0,0,0);
if (unit === 'week') {
day = clone.getDay();
clone = day ? new Date(clone - 1000 * 60 * 60 * 24 * day) : clone;
}
else if (unit === 'month') clone.setDate(1);
else if (unit === 'year') clone.setMonth(0,1);
}
return clone;
};
你尝试输出dateToCheck.getDay的'结果()'和'actualDate .getDay()'看看有什么问题吗? –
如果'dateToCheck'比今天晚了一周,该怎么办? –
@lc。这就是为什么我检查了是否至少24小时过去了。 –