繁体   English   中英

如何在JavaScript中查找日期是否在当前日期之前

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM