我正在使用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
答案 0 :(得分:1)
黑暗中的野蛮刺,但current_date
是Date
对象而expiration
是String
,可能会格式化为dateString所需的规范。见这里:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse
您需要确保expiration
中返回的字符串符合标准。
答案 1 :(得分:0)
Date.parse()
未返回Date
个实例。相反,它返回一个整数,表示自纪元以来的毫秒数。或者,如果传递的任何内容都不可解析,它将返回NaN
。
在您的代码中,current_date
是Date
的实例。显然,日期对象可以作为日期进行解析。当你注销它时,它会在该日期对象上调用toString()
以找出如何记录它。
但是expiration
不是Date
,而是一个字符串。并且您运行的平台的JS env无法将该字符串格式识别为可解析的日期字符串。
我建议将日期存储为整数。 dateObj.getTime()
或Date.now()
将返回您可以保存的整数,然后将它们转回实际日期对象,如下所示:
myDate = new Date(parseInt(dateIntegerAsString, 10));
哪个可以跨平台可靠地工作,它可能比你在这里更强大的日期解析速度快得多。