2012-03-05 71 views
1

我正在用鈦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

回答

0

Date.parse()不返回Date實例。相反,它會返回一個整數,表示自紀元以來的毫秒數。或者,如果通過的內容無法解析,則會返回NaN

在您的代碼中,current_dateDate的一個實例。日期對象顯然可以解析爲日期。當你註銷它時,它會在該日期對象上調用toString()以瞭解如何記錄它。

expiration不是Date,它是一個字符串。並且您正在運行的平臺的JS env無法將該字符串格式識別爲可分析的Date字符串。

我建議將日期存儲爲整數。 dateObj.getTime()Date.now()都將返回整數,你可以保存,然後將它們轉回到真正的約會對象一樣簡單:

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

這將可靠地工作跨平臺,它可能比更強大的更快日期解析你在這裏。

1

在黑暗中野生刺,但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