日期存储在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个字符还是有更好的东西?
我从引用的问题中读到答案,但没有找到这个问题的明确答案。这些答案描述了日期相等比较的通用解决方案 这个问题询问如何查找日期部分是否在当前日期之前。
答案 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()
的时间部分设置为当天开始的午夜,例如
// 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;
以上适用于大多数浏览器,因为<
运算符将第一个Date强制转换为其内部时间值,而 setHours 的返回值则是第二个Date的调整时间值。 / p>
主机系统时区偏移应该用于创建两个日期,因此对两者都有相同的效果,因此在这种情况下可以忽略。
强烈建议您不要依赖于使用Date构造函数或Date.parse解析字符串(它们等同于解析)。始终手动解析字符串。对您需要处理的格式使用定制函数,或使用库并提供解析格式。这是唯一方式,您可以确保正确解析。
答案 4 :(得分:-3)
在日期对象上使用Gettime函数,而不是比较它们。