Javascript 如何检查两个日期是否不在同一日历日
如何检查两个日期是否不在同一天。我提出了这个解决方案,但也许有更好的方法:Javascript 如何检查两个日期是否不在同一日历日,javascript,date,Javascript,Date,如何检查两个日期是否不在同一天。我提出了这个解决方案,但也许有更好的方法: var actualDate = new Date(); var isNotToday = dateToCheck.getDay() !== actualDate.getDay() || dateToCheck < actualDate - 24 * 60 * 60 * 1000; var actualDate=新日期(); var isNotToday=dateToCheck.getDay()!=getDa
var actualDate = new Date();
var isNotToday = dateToCheck.getDay() !== actualDate.getDay() || dateToCheck < actualDate - 24 * 60 * 60 * 1000;
var actualDate=新日期();
var isNotToday=dateToCheck.getDay()!=getDay()| | dateToCheck
检查日期、月份和年份最安全:
var isNotToday = dateToCheck.getDate() != actualDate.getDate()
|| dateToCheck.getMonth() != actualDate.getMonth()
|| dateToCheck.getFullYear() != actualDate.getFullYear();
这将确保您在遇到DST和闰年时不会遇到异常情况,否则可能会产生干扰。检查同一天、同一月份和同一年如何:
var isSameDay = (dateToCheck.getDate() == actualDate.getDate()
&& dateToCheck.getMonth() == actualDate.getMonth()
&& dateToCheck.getFullYear() == actualDate.getFullYear())
不要创建带有时间的日期对象,这样它们都是在午夜生成的。那就检查一下时间
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)测试版)进行解析,如果你没有通过时间,它们将在午夜生成
如果你有时间,就把它放在地板上,在午夜进行测试。另一个选项是使用
.toDateString()
函数将两个日期解析为字符串。函数将输出格式化为:“Wed Jul 28 1993.”然后您可以比较两个日期字符串
actualDate.toDateString() === dateToCheck.toDateString()
// returns true if actualDate is same day as dateToCheck
这里有一个小插曲:
来自MDN的更多信息:
函数相等(开始日期、结束日期){
返回endDate.valueOf()==startDate.valueOf();
}
var now=新日期();
var startDate=新日期(now.getFullYear()、now.getMonth()、now.getDate());
var endDate=新日期(2017年0月13日)
var结果=等质量(开始日期、结束日期);
控制台日志(结果)代码>对日期的实例使用startOf
方法:
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小时。@andreashöberle也许我错过了什么(已经晚了),但是如果dateToCheck
比今天晚了一周,那么.getDay()
s将是相等的,dateToCheck
将比实际日期-24h
大得多……我想他想检查两个日期是否都是星期一、星期二、星期三,等等。现在这正在使用你的大脑!我猜这是最简单的一行回答!这种方法似乎是最快的:我会将其用于多个操作,否则在我看来,公认的答案会更简洁一些。
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;
};