比较两个日期的Javascript返回NaN

问题描述:

我正在用钛Appcelerator在JavaScript中构建一些比较两个日期的东西。比较两个日期的Javascript返回NaN

我将到期存储为属性字符串。值为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

什么平台?如果您在该浏览器的控制台中手动运行Date.parse(),并在注释中打印字符串,会发生什么? – davin 2012-03-05 22:59:32

+0

Date.parse奇怪地返回1969-12--2147483629 -596:-31:-23 +0000 – 2012-03-05 23:07:18

Date.parse()不返回Date实例。相反,它会返回一个整数,表示自纪元以来的毫秒数。或者,如果通过的内容无法解析,则会返回NaN

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

expiration不是Date,它是一个字符串。并且您正在运行的平台的JS env无法将该字符串格式识别为可分析的Date字符串。

我建议将日期存储为整数。 dateObj.getTime()Date.now()都将返回整数,你可以保存,然后将它们转回到真正的约会对象一样简单:

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

这将可靠地工作跨平台,它可能比更强大的更快日期解析你在这里。

在黑暗中野生刺,但current_dateDate对象而expirationString并且可以畸形的一种用于dateString所需的规格。在这里看到:

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

您需要确保在expiration返回的字符串遵循的标准。

+0

好吧,我的一位同事想出了它。这里是。猜猜我必须将其转换为日期并删除连字符。 var expiration = new Date(Ti.App.Properties.getString(“expiration”)。replace(/ -/g,'/')); – 2012-03-05 23:05:53