2013-08-02 44 views
0

代碼:令人難以置信的奇怪的javascript日期問題

function format_date(date, index) 
{ 
    if (!date || (index && !(date[ index ]))) 
    { 
     return ''; 
    } 

    console.log(date); 

    var date = new Date(
     (index === undefined) ? date : date[ index ] 
    ); 

    console.log(date); 


    return (date.getMonth() + 1) + '/' + 
     date.getDate() + '/' + 
     date.getFullYear() + ' 12:00 AM' 
    ; 
}; 

format_date("2013-07-25"); 

輸出:

2013-07-25 
Date {Wed Jul 24 2013 20:00:00 GMT-0400 (Eastern Standard Time)} 
"7/24/2013 12:00 AM" 

這是在Linux上運行的節點JS服務器上。從date輸出是:

Fri Aug 2 10:39:28 EDT 2013 
+1

問題是什麼?也許你感到困惑,因爲在'new Date(...)'上解析的日期被認爲是GMT,而手動解析時,你使用'getDate()'而不是'getUTCDate()'? – randunel

+2

嘿,你可能會感興趣的時間/日期庫[moment.js](http://momentjs.com/)做這種東西很容易 – Plato

+0

@Plato這是一個非常酷的圖書館,但可能超過了什麼我需要。 –

回答

2

除非您指定一個時區偏移,它假定你的日期是在GMT時間。

+2

確實如此,但僅僅是因爲字符串是用破折號作爲分隔符輸入的。如果它被提供爲「2013/07/25」,那麼它將被解釋爲當地時間。最好使用[moment.js](http://momentjs.com) –