2013-10-14 46 views
0

我有一個時區字符串,例如「太平洋時間(美國&加拿大)」。我需要在特定日期(包括夏令時)以UTC爲單位獲取該時區下午3點的相應時間。我怎麼去解決這個問題?在特定時區生成日期

例如,我需要在12月3日下午3點找到下午3點,UTC時間的PDT。

+1

_Date_是否識別時區?例如對我來說'new Date('2013-10-15 00:25:00 PST')。toUTCString(); //「2013年10月15日星期二08:25:00 GMT」' –

回答

2

該時區標識符看起來像是從Rails的還是來自Twitter的(使用Rails的)。您首先需要將其轉換爲標準的IANA區域標識,例如「America/Los_Angeles」。請參見ActiveSupport::TimeZone docs中的MAPPING聲明。

然後,您可以使用我提到的其中一個庫here

特別是,你可能想嘗試moment-timezone。您需要針對此特定功能的最新開發版本,因爲它已添加到問題#25中,該版本尚未在當前版本中發佈。然後,你可以做這樣的事情:

moment.tz("2013-12-03T15:00:00","America/Los_Angeles").utc().format() 

可以調整輸入/輸出格式,以任何有意義的你,並通過moment.js支持。

其他時區庫I mentioned也可能提供類似的功能,沒有太多的開銷,所以他們值得一看。

+0

謝謝!這正是我需要的。 –

+0

@DanPalumbo - 更新後給你一些開始的代碼。 –

1

這似乎爲我工作,但它確實感覺有點脆弱

new Date('2013-12-03 15:00:00 PDT').toUTCString() 

    -> "Tue, 03 Dec 2013 22:00:00 GMT" 
+1

這種方法只識別少量時區縮寫。參見[RFC 822](http://www.ietf.org/rfc/rfc0822.txt)第5.1節。一般來說,時區縮寫是沒有用的,因爲含糊不清。例如,「中央標準時間」或「中國標準時間」是「CST」嗎? –

+0

這將起作用,但如果我可以從完整的時區字符串而不是縮寫來完成,那將會很好。 –

+0

@MattJohnson另一種選擇是用「±hhmm」格式的偏移量替換縮寫,例如'-0700'或'-0800'。 –

相關問題