Webkit日期解析

4

我有一个简单的函数来计算两个日期之间的天数。

可能重复:
Safari JS无法解析YYYY-MM-DD日期格式吗?

function checkDias(){
    str1 = $('#salida').val();
    str2 = $('#regreso').val();
    difference = Math.floor(( Date.parse(str2) - Date.parse(str1) ) / 86400000);
    if (diferencia > 0) { } else {
        console.log(difference); console.log(str1); console.log(str2);
       // alert the user....
    }
}

我这样做是为了检查第二个日期是否在第一个日期之后。在Firefox中,这个功能可以正常使用,但在Webkit(Safari或Chrome)中不能。str1和str2都可以很好地记录到控制台中,但是在Webkit中,差异变量返回NaN,在FF中返回int值。
有任何想法为什么会这样吗?我正在使用jQuery UI日期小部件获取并格式化YYYY-MM-DD,但我认为这与此无关。
谢谢!

5
查看:Safari JS不能解析YYYY-MM-DD日期格式? - Christian C. Salvadó
2个回答

2

在我看来,Date.parse方法并不一致(实际格式因浏览器版本、JS引擎版本等不同而异)。我习惯使用以下方法在JavaScript中进行日期操作(例如比较):

  1. 以某种方式获取日期的组件(在您的情况下,可以通过“ - ”拆分字符串来完成)。
  2. 使用上一步骤中的组件构造日期。
  3. 使用getTime()方法比较日期的Unix时间戳。

这是代码:

var d1Parts = s1.split('-'),
    d2Parts = s2.split('-'),
    d1 = new Date(d1Parts[0], d1Parts[1]-1, d1Parts[2]),
    d2 = new Date(d2Parts[0], d2Parts[1]-1, d2Parts[2]);

if ( d1.getTime() < d2.getTime() ) {
    console.log('the first date is before the second');
}

2
在调用“Date”构造函数时,需要从月份部分减去1而不是加(月份是从零开始计数)。此外,要比较时间戳,您不需要显式调用“getTime”方法,通过比较“if(d1<d2)”运算符将隐式地将涉及的两个对象转换为原始值进行比较。 - Christian C. Salvadó
谢谢你的评论,Christian。 - bjornd

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接