2012-10-05 71 views
0

我正在使用JavaScript日期,並且我試圖從字符串中獲取日期時感到有些困惑。本月首日的Javascript日期對象問題

這是我的代碼:

var formatDate = function(dateObj) { 
    // make sure date values are two digits and months start at 1 
    var adjMonth = dateObj.getMonth() + 1; 
    var adjDate = dateObj.getDate(); 
    if (adjMonth < 10) adjMonth = '0' + adjMonth; 
    if (adjDate < 10) adjDate = '0' + adjDate; 

    // build and return dateStr 
    var dateStr = dateObj.getFullYear() + '-' + adjMonth + '-' + adjDate; 
    return dateStr; 
}; 

$(document).ready(function() { 
    var testIn1 = "2012-02-01"; 
    var testDate1 = new Date(testIn1); 
    var testDate1Str = formatDate(testDate1); 

    var testIn2 = "2012-01-31"; 
    var testDate2 = new Date(testIn2); 
    var testDate2Str = formatDate(testDate2); 

    $('#output').html("---Input = '" + testIn1 + "':<br>" + testDate1 + "<br>" + testDate1Str + "<br>" 
        +"---Input = '" + testIn2 + "':<br>" + testDate2 + "<br>" + testDate2Str + "<br>"); 
});​ 

結果我從這個得到的是:

---Input = '2012-02-01': 
Tue Jan 31 2012 18:00:00 GMT-0600 (CST) 
2012-01-31 
---Input = '2012-01-31': 
Mon Jan 30 2012 18:00:00 GMT-0600 (CST) 
2012-01-30 

這是沒有意義的我,爲什麼一個日子了嗎?從2012年2月1日起,2012-01-31看起來似乎沒有道理......我在這裏錯過了什麼?

+0

嗯,我看...所以JS是假設我輸入查詢在GMT日期,然後吐出的CST轉換後的時間? – kand

+1

種。它實際上是在格林尼治標準時間吐出來的,你只是沒有使用date對象中給出的'.getTimezoneOffset()'。 – weexpectedTHIS

回答

3

它看起來像Date.parse使用00:00:00格林威治標準時間,如果你沒有通過一個時間,它將是您的時區(格林威治標準時間-6)前一天18:00:00。如果你傳遞一個明確的時間,那麼這種行爲受到抑制:

Date.parse(testIn1 + " 00:00:00"); 
+0

啊,現在有用,有道理,謝謝! – kand