繁体   English   中英

Javascript日期比较不符合预期

[英]Javascript Date Comparison not behaving as expected

我正在将一个SQL日期-不是datetime-对象推送到我的Javascript代码中,我需要查看它是否在今天之前。 这是我的代码(相关部分):

todaysDate = new Date();
todaysDate.setHours(0,0,0,0);
var date = Date.parse(row[3]);
// date.setHours(0,0,0,0);
if (date < todaysDate) {
    alert("date is before today");
    dueDate = '<small class="text-danger">';
} else {
    alert("date is after today");
    dueDate = '<small class="text-muted">';
}

row [3]是SQL日期的来源。 因此,这对除今天以外的所有日期都适用。 没有注释行,它认为具有今天日期的任何内容都是过去的。 用注释行,我的代码中断了。 关于如何解决这个问题有什么想法吗? 不知道我在做什么错。

谢谢!

如果您的日期字符串类似于“ 2016-04-10”,并且时区位于格林尼治标准时间以西,例如-04:00,那么在符合ECMAScript 2016的浏览器中,您将获得“ 2016-04-09T19:00”的日期: 00-0400" 。

当您使用new Date()创建日期并将小时设置为零(假设您在4月10日所在的位置)时,将获得“ 2016-04-10T00:00:00-0400”的日期。

因此,比较时它们具有不同的时间值。

您需要将从数据库中获得的字符串视为本地字符串,或者将您所在的UCT日期视为当前日期,因此:

 var dateString = '2016-04-10'; var parsedDate = new Date(dateString); var todayUTCDate = new Date(); todayUTCDate.setUTCHours(0,0,0,0); document.write(parsedDate + '<br>' + todayUTCDate); 

并非所有浏览器都根据ECMAScript 2015解析字符串,因此应始终手动对其进行解析。 使用一个库,或编写一个小函数,例如

// Parse date string in format 'yyyy-mm-dd' as local date
function parseISOLocal(s) {
  var b = s.split(/\D/);
  return new Date(b[0], b[1]-1, b[2]);
}

并替换:

var date = Date.parse(row[3]);

有:

var date = parseISOLocal(row[3]);

然后在比较中比较时间值:

if (+date < +todaysDate) {

要么

if (date.getTime() < todaysDate.getTime()) {

使用日期对象的getTime()

getTime()方法返回1970年1月1日午夜到指定日期之间的毫秒数。

您可以比较毫秒并进行操作

date.getTime() > todaysDate.getTime()

另外,请确保Date.parse返回有效日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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