如何在javascript中找到当前日期之前的日期

时间:2016-09-04 20:36:53

标签: javascript date

日期存储在javascript中作为yyyy-mm-dd字符串,其时间部分始终为0,如

今天的日期是

"2016-09-04T00:00:00"

如何查找日期是否在当前日期之前? 我试过了

alert(new Date("2016-09-04T00:00:00") < new Date());

但如果今天是2016-09-04

,则返回true,错误

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

如何仅比较日期部分?

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

我从引用的问题中读到答案,但没有找到这个问题的明确答案。这些答案描述了日期相等比较的通用解决方案 这个问题询问如何查找日期部分是否在当前日期之前。

5 个答案:

答案 0 :(得分:1)

您缺少时区偏移量。试试这个:https://jsfiddle.net/WalterIT/ved5a3hp/

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

我已将其更改为第5天(已经是我的时区今天了。如有需要请修改)

答案 1 :(得分:0)

尝试

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


alert((old < curr));

并改变年份进行测试。

答案 2 :(得分:0)

尝试dates.compare(a,b) - 日期是一个对象。 返回一个数字。 -1,0或1。

答案 3 :(得分:-1)

解析是否由于浏览器之间的差异而不建议使用带有Date构造函数的字符串。

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

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

如果你想比较两者,那么将new Date()的时间部分设置为当天开始的午夜,例如

&#13;
&#13;
// Returns false on 5 September, 2016 local time
console.log(new Date('2016-09-05T00:00:00') < new Date().setHours(0,0,0,0));
&#13;
&#13;
&#13;

以上适用于大多数浏览器,因为<运算符将第一个Date强制转换为其内部时间值,而 setHours 的返回值则是第二个Date的调整时间值。 / p>

注意

主机系统时区偏移应该用于创建两个日期,因此对两者都有相同的效果,因此在这种情况下可以忽略。

强烈建议您不要依赖于使用Date构造函数或Date.parse解析字符串(它们等同于解析)。始终手动解析字符串。对您需要处理的格式使用定制函数,或使用库并提供解析格式。这是唯一方式,您可以确保正确解析。

答案 4 :(得分:-3)

在日期对象上使用Gettime函数,而不是比较它们。