簡體   English   中英

momentjs:如何在特定時區獲取日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM