Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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,日期以yyyy mm dd字符串的形式存储在javascript中,其时间部分始终为0 今天的日期是 "2016-09-04T00:00:00" 如何确定日期是否早于当前日期? 我试过了 警报(新日期(“2016-09-04T00:00:00”)

日期以yyyy mm dd字符串的形式存储在javascript中,其时间部分始终为0

今天的日期是

"2016-09-04T00:00:00"
如何确定日期是否早于当前日期? 我试过了

警报(新日期(“2016-09-04T00:00:00”)
但如果今天是2016-09-04,则返回true,而返回true则是错误的

new Date()
也返回时间,这会产生错误的结果

如何只比较日期部分

今天转换为字符串和子字符串的日期应该只用于比较字符串的前10个字符,还是有更好的方法

我阅读了参考问题的答案,但还没有找到这个问题的明确答案。这些答案描述了日期相等比较的通用解决方案。 此问题询问如何查找日期部分是否早于当前日期。

请尝试

var old = new Date("2017-09-04T00:00:00").getTime();
var curr  = Date.now();


alert((old < curr));
var old=new日期(“2017-09-04T00:00:00”).getTime();
var curr=Date.now();
警报((旧<当前));

并更改年份以进行测试。

对日期对象使用Gettime函数,然后比较它们。

尝试日期。比较(a,b)-日期是一个对象。
返回一个数字-1、0或1。

您缺少时区偏移。试试这个:


我已将其更改为第5个(在我的时区中已经是这一天了。如果需要,请进行修改)

如果由于浏览器之间的差异,不建议使用带有日期构造函数的字符串进行解析

在这种情况下,符合ES5及更高版本的浏览器将把“2016-09-04T00:00:00”解析为2016年9月4日午夜的“本地”日期和时间。某些浏览器(如Safari)会错误地将其视为UTC。见以上建议

但是,在所有浏览器中,
new Date()
将为当前时刻创建日期,而不是一天开始时的午夜。因此,如果您在2016年9月4日运行此代码,则除非您在当地时间00:00:00.000运行此代码,
new Date()
的时间将在00:00:00.000之后

如果要比较两者,请在一天开始时将
new Date()
的时间部分设置为午夜,例如

//在当地时间2016年9月5日返回false

控制台日志(新日期('2016-09-05T00:00:00')可能重复我读了这些答案,但还没有找到问题的明确答案。您能提供更多信息吗?参考问题中的哪个答案直接回答了这个问题?我需要将字符串“2016-09-04T00:00:00”的日期部分与今天的日期进行比较。你的答案是关于完整时间戳比较你的答案是关于完整时间戳比较。我需要将字符串“2016-09-04T00:00:00”的日期部分与今天的日期进行比较。如何做到这一点?您需要将其转换为时间戳,以便将它们作为整数进行比较。它做你想做的事情,只是方式不同。
alert(新日期(“2016-09-04”).getTime()
outputs
true
这是错误的。由于今天是2016-09-04,所以结果必须为false…或者如果您希望相反,请使用编辑的答案
警报(新日期(“2016-09-04T00:00:00”)。getTime()
也输出错误的结果,true。如何只比较日期,忽略时间?我只需要比较日期部分。要比较的日期中的时间部分始终为T00:00:00,如何将当前日期与时间部分T00:00:00进行比较?要消除日期1上的小时、分、秒和毫秒,请执行以下操作:date1.setHours(0,0,0,0)
console.log(新日期(“2016-09-05T00:00:00”)==new date().setHours(0,0,0))
console.log(新日期(“2016-09-05T00:00:00”).getTime()==new Date().setHours(0,0,0,0));
两个输出都为false。所以看起来setHours不起作用。我以为你要找的是“false”。今天是第四个。@Andrus-
新日期(“2016-09-05T00:00:00”)
返回一个日期对象,该对象只对其自身进行
=
新日期(“2016-09-05T00:00:00”)
应被视为本地浏览器,但并非所有浏览器都这样做。时区偏移量与此无关,因为在本例中,两者都被视为本地浏览器。OP返回true,因为在特定日期的第一毫秒之后,
new date()
将返回一个晚于该日期00:00:00的日期。@RobG您是否检查了我的小提琴链接?只有当我添加/删除偏移量时,我才能获得正确的时间戳。如果没有该时间戳,dateA的时间戳总是提前两小时(我在GMT+2)。我给你一个例子来比较你的答案和我的答案。请检查:请不要在其他地方发布,你可以在这里发布代码作为可运行的片段。如果按照ECMA-262,“2016-09-05T00:00:00”进行分析将在主机系统时区中生成00:00:00的日期。如果您的时区为UTC+0200,则您的调整会将该时区的日期设置为2016-09-04T22:00:00(即,该日期现在是前一天),并且dateA将早于dateB,如您的小提琴所示。它会生成错误的结果(即true而不是false)。对于GMT以西的用户,它将产生相反的效果。在语句中使用==或===时仍显示“false”,今天是第5天。@MichaelWalter false是预期结果,与答案中的解释完全一致。
var old = new Date("2017-09-04T00:00:00").getTime();
var curr  = Date.now();


alert((old < curr));
dateA = new Date("2016-09-05T00:00:00");
offset = dateA.getTimezoneOffset() * 1000 * 60;
dateA = dateA.getTime() + offset;
dateB = new Date().setHours(0,0,0,0);