[英]How to find if date if before current date in javascript
日期以yyyy-mm-dd字符串的形式存储在javascript中,其时间部分始终为0,例如
今天是
"2016-09-04T00:00:00"
如何查找日期是否在当前日期之前? 我试过了
alert(new Date("2016-09-04T00:00:00") < new Date());
但是如果今天是2016-09-04,则返回true与错误
new Date()
也返回时间,这将产生错误的结果。
如何只比较日期部分?
今天的日期应该转换为仅用于比较字符串的前10个字符的字符串和子字符串,还是有更好的选择?
我从引用的问题中读取了答案,但尚未找到针对该问题的明确答案。 这些答案描述了日期相等性比较的通用解决方案。 此问题询问如何查找日期部分是否在当前日期之前。
您缺少时区偏移量。 试试这个: 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号(在我的时区中已经是今天。请根据需要进行修改)
尝试
var old = new Date("2017-09-04T00:00:00").getTime();
var curr = Date.now();
alert((old < curr));
并更改年份进行测试。
试试dates.compare(a,b)-date是一个对象。 返回一个数字。 -1、0或1。
由于浏览器之间的差异,不建议使用Date构造函数解析字符串。
在这种情况下,符合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()
的时间部分设置为午夜,例如
// Returns false on 5 September, 2016 local time console.log(new Date('2016-09-05T00:00:00') < new Date().setHours(0,0,0,0));
上面的方法适用于大多数浏览器,因为<
运算符将第一个Date 强制转换为其内部时间值,而setHours的返回值是第二个Date的调整后的时间值。
在创建两个日期时都应使用主机系统时区偏移量,因此对两个日期都具有相同的影响,因此在这种情况下可以忽略。
强烈建议您不要依赖使用Date构造函数或Date.parse解析字符串(它们等效于解析)。 始终手动解析字符串。 为您需要处理的格式使用定制功能,或者使用库并提供要解析的格式。 这是您可以确保正确解析的唯一方法。
在日期对象上使用Gettime函数而不是对其进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.