Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查两个日期是否不在同一日历日_Javascript_Date - Fatal编程技术网

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;
};