Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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_Equality - Fatal编程技术网

Javascript 检查两个日期是否具有相同的日期信息

Javascript 检查两个日期是否具有相同的日期信息,javascript,date,equality,Javascript,Date,Equality,如何检查两个不同的日期对象是否具有相同的日期信息(具有相同的日期、月份、年份?我试过“==”、“==”和.equals,但似乎都不管用。Hellnar 您可以尝试(请原谅函数名:)-根据felix的valueof修改,而不是getTime) 用法: if(isEqual(date1, date2)){ // do something } 也许能帮你走一段路 另见: "http://www.java2s.com/Tutorial/JavaScript/0240__Date/Datevalu

如何检查两个不同的日期对象是否具有相同的日期信息(具有相同的日期、月份、年份?我试过“==”、“==”和.equals,但似乎都不管用。

Hellnar

您可以尝试(请原谅函数名:)-根据felix的valueof修改,而不是getTime)

用法:

if(isEqual(date1, date2)){
   // do something
}
也许能帮你走一段路

另见:

"http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm“

您可以使用或:


减去它们并与零进行比较:

var date1 = new Date();
var date2 = new Date();
//对日期做点什么

(date1 - date2) ? alert("not equal") : alert("equal");
要将其放入变量中,请执行以下操作:

var datesAreSame = !(date1 - date2);
我使用了以下代码:

Date.prototype.isSameDateAs = function(pDate) {
  return (
    this.getFullYear() === pDate.getFullYear() &&
    this.getMonth() === pDate.getMonth() &&
    this.getDate() === pDate.getDate()
  );
}

然后您可以这样调用它:
if(aDate.isSameDateAs(otherDate)){…}
类型转换为整数:

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true

如果您只想检查日期是否在同一天发生,而不考虑时间,则可以使用
toDateString()
进行比较。此方法只返回日期,不返回时间:

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
}

用于确定两个日期是否相等的简单单行备选方案,忽略时间部分:

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
函数isSameDate(a,b){
返回Math.abs(a-b)<(1000*3600*24)和&a.getDay()==b.getDay();
}
它确定日期a和b的差异是否不超过一天,并且是否共享一周中的同一天

函数isSameDate(a,b){
返回Math.abs(a-b)<(1000*3600*24)和&a.getDay()==b.getDay();
}
控制台日志(isSameDate(新日期(2017年7月21日),新日期(2017年7月21日))//完全相同的日期=>true
控制台日志(isSameDate(新日期(2017,7,21,23,59,59),新日期(2017,7,21))//最远相同日期=>true
控制台日志(isSameDate(新日期(2017,7,20,23,59,59),新日期(2017,7,21))//最近的不同日期=>false
控制台日志(isSameDate(新日期(2016,7,21),新日期(2017,7,21))//不同年份=>false

控制台日志(isSameDate(新日期(2017年8月21日),新日期(2017年7月21日))//不同月份=>false
要获得更好的日期支持,请使用moment.jsisame方法

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 )

既然可以使用getTime()两次,为什么还要运行十几个函数呢?哦,你是否想过忽略小时、月和年的差异?在这种情况下,时区考虑因素可能开始起作用了?因为问题是“两个不同的日期对象具有相同的日期信息”,而这段代码就是这样做的:比较日期而不考虑计时器,我的意思是说“忽略小时、分钟和秒的差异”,因为在
=
的情况下,值被转换为数字。在
=
的情况下,对象本身会进行比较(只有
a==a
是正确的)。只需指出,该解决方案要求日期只包含日期部分,而很多人可能会有不同的要求()因此,使用此选项时,请确保时间部分设置为0,这要归功于:
a.setHours(0,0,0)如果存在毫秒差异,则此操作将不起作用。由于
getTime()
以毫秒为单位返回时间,因此这两个时间也可以相差毫秒。在这个解决方案中,它不会像预期的那样工作。尝试使用
toDateString()
一元运算符
function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}
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 )