我得到一个SQL日期 - 不是日期时间 - 对象被推入我的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日期的来源。因此,除了今天的日期之外,这适用于所有事情。如果没有评论专栏,它会认为今天的日期已经过去了。使用注释行,我的代码会中断。有任何想法如何解决这个问题?不知道我做错了什么。
谢谢!
答案 0 :(得分:3)
如果您的日期字符串类似于“2016-04-10”且您的时区位于GMT以西,比如-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()) {
答案 1 :(得分:0)
使用日期对象的getTime()
。
getTime()方法返回1970年1月1日午夜到指定日期之间的毫秒数。
您可以比较毫秒并执行操作
date.getTime() > todaysDate.getTime()
还要确保Date.parse返回有效日期。