2015-09-05 61 views
2

js中可能創建不受時區影響的日期對象嗎? 例如,我想設置年份「2015」,月份「03」和日期「31」。在js中創建日期以忽略時區

var ex = new Date(2015,3,31); 

如果我「打印」這個變量,現在看來是這樣的:

Fri May 01 2015 00:00:00 GMT+0200 (ora legale Europa occidentale) 

它改變到第二天。有可能避免這種情況?我如何創建一個每個時區都一樣的Date對象?

我需要將這種行爲包含在應用程序中,我不能僅僅使用字符串,因爲我們必須使用與日期對象一起使用的datepicker插件(Bootstrap)。

在此先感謝

+0

從3月份開始的月份是4月份,僅有30天,這就是爲什麼它會在第二天更改。 –

+0

[這裏是Date類的MDN文檔。](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) – Pointy

回答

0

是的!如果使用Date.UTC函數創建所有Date對象,則它們都將與標準UTC時區相關,即使用戶的瀏覽器設置了不同的時區。

例如:

var ex = new Date(Date.UTC(2015, 3, 31)); 

這將創建一個Date對象3/31/2015 UTC和橫跨無論其默認時區的所有瀏覽器一致的。

在內部,ex內部的日期仍將在用戶的本地時區中轉換。所以如果你從中讀取數據,說出日期,這將是相對於用戶的瀏覽器時間。

所以,如果你需要閱讀的時候回來了UTC,那麼你可以做這樣的事情:

ex.getUTCYear(); // 2015 
ex.getUTCMonth(); // 3 
ex.getUTCDate(); // 31 

這會給你值回UTC時間。

+0

我已經試過你的解決方案,現在在Chrome控制檯,仍然給我回2015,4,1不2015,3,31 :( –

+0

非常感謝你!我們做到了!愛你!ahah;) –

+0

月份是0-11,而不是1-12。 –

0

簡短的回答是你不能。

Date對象只是系統時間設置的訪問者(所以它會使用本地計算機時區)。然後,您可以通過使用getTimezoneOffset()減去本地時區來操作日期,或者使用setUTCHours()強制時間。

但是,如果你能歡迎只有一個時區翻過你的applcation,你可以在那個paticular時區使用moment.js獲取日期時間:

moment().tz("America/Los_Angeles").format();

+1

除了*可以*使用UTC本地Date原型上的API,您可以使用'Date.UTC()'來構造一個不含時區偏移的日期。 – Pointy

+0

不,它不工作,當我設置'Date.UTC(2015,3,31)'年,月和日'我得到了4月的第一個,同樣的行爲。 –