比较两个日期的Javascript返回NaN

时间:2012-03-05 22:55:01

标签: javascript string date titanium appcelerator

我正在使用Titanium Appcelerator在javascript中构建一些比较两个日期的东西。

我将expiration存储为属性字符串。值为2012-02-29 05:00:00 +0000 current_date的值是2012-03-05 22:49:54 +0000

但是,当我在到期时执行Date.parse时,其结果为NaN,而current_date则返回unix时间戳1330987794000。

任何想法为什么?

var current_date = new Date();
var expiration = Ti.App.Properties.getString("expiration");
Ti.API.info(expiration); // returns 2012-02-29 05:00:00 +0000
Ti.API.info(current_date); // returns 2012-03-05 22:49:54 +0000

var check_expiration = Date.parse(expiration);
var check_current_date = Date.parse(current_date);
Ti.API.info(check_expiration); // returns NaN
Ti.API.info(check_current_date); // returns 1330987794000

2 个答案:

答案 0 :(得分:1)

黑暗中的野蛮刺,但current_dateDate对象而expirationString,可能会格式化为dateString所需的规范。见这里:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

您需要确保expiration中返回的字符串符合标准。

答案 1 :(得分:0)

Date.parse()未返回Date个实例。相反,它返回一个整数,表示自纪元以来的毫秒数。或者,如果传递的任何内容都不可解析,它将返回NaN

在您的代码中,current_dateDate的实例。显然,日期对象可以作为日期进行解析。当你注销它时,它会在该日期对象上调用toString()以找出如何记录它。

但是expiration不是Date,而是一个字符串。并且您运行的平台的JS env无法将该字符串格式识别为可解析的日期字符串。

我建议将日期存储为整数。 dateObj.getTime()Date.now()将返回您可以保存的整数,然后将它们转回实际日期对象,如下所示:

myDate = new Date(parseInt(dateIntegerAsString, 10));

哪个可以跨平台可靠地工作,它可能比你在这里更强大的日期解析速度快得多。