[英]momentjs: how to get the date in a specific timezone
簡而言之,我希望能夠尊重服務器的時區。 我已經將機器的時區設置為阿拉斯加,但我正在通過布里斯班時區字符串。 現在我需要moment.toDate
來返回與我在當前構造函數中傳遞的日期實例相同的時區; 例如
m = moment("2016-11-20T08:00:00+10:00")
m.format() // "2016-11-20T08:00:00+10:00"
m.toDate() // Sat Nov 19 2016 13:00:00 GMT-0900 (AKST)
我希望從輸入時區的瞬間獲得一個Date
實例; 如某種方式得到toDate
返回Sun Nov 20 2016 08:00:00 GMT+1000 (AEST)
FWIW我嘗試使用和不使用moment.tz.setDefault
相同的代碼,雖然它正確地更改了format
結果, toDate
總是使用機器的時區!
更新
我需要這種行為的原因是一些JavaScript庫和控件不理解moment
,只能使用Date
,時間/日期在被它們呈現時會出現偏差。 我正在處理的一個例子是jQuery UI日期選擇器控件。 我希望日期選擇器顯示當前日期,因為它在服務器上(或在特定時區)。
提前致謝。
Date
對象在內部表示UTC時間,並且只能在投影時使用其運行的計算機的時區。
絕對沒有辦法生成使用任意時區的Date
對象。 您可能遇到的任何嘗試操作Date
對象的示例(例如通過添加或減去時區偏移)都存在根本缺陷。
Moment本身具有很好的時區支持,包括使用命名時區而不僅僅是時區偏移的時刻 - 時區擴展。 但是一旦你回到Date
對象 - 你就會回到該對象的行為的擺布。
對不起,但沒有辦法實現你的要求。 也許您可以詳細說明為什么要這樣做,我可以推薦一種解決方法。
更新:關於您的更新,通常有一種機制可以將日期選擇器中的值作為文本而不是日期對象。 使用jQuery UI日期選擇器控件的示例, onSelect
事件已經將它作為文本提供給您,或者您可以簡單地調用.val()
而不是.datepicker('getDate')
來從文本中獲取文本。 一旦你有了文本值,你就可以隨心所欲地解析它。
同樣,在設置值時,您不一定需要Date
對象。 您可以將文本框的值設置為字符串,也可以將字符串傳遞給setDate
函數。
在大多數情況下,您不必通過Date
對象。 但如果由於某些原因你做了,那么你需要人為地構建一個像瘋狂的東西:
var d = new Date(m.format('YYYY/MM/DD'));
通常情況下,我會反對 - 但如果它只是為了獲得傳遞給UI控件的值,那么它可能沒問題。
這將使您在與時間字符串相同的時區中獲得片刻,但toDate始終位於本地時區。
d = "2016-11-20T08:00:00+10:00"
m = moment(d).utcOffset(d)
m.format()
m.toDate()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.