2017-04-20 26 views
1

我正在使用momentjs,但有一個問題試圖將UTC時間轉換爲由名稱'America/New_York'指定的特定時區(不一定是當地用戶)。 This SO question是相似的,但沒有真正的幫助。MomentJS從UTC轉換爲所需的時區,而不僅僅是本地

我的思考過程是用服務器收到的日期創建utc moment obj,然後將UTC時間格式化爲特定時區以供顯示。的如何我目前正在處理這個小片段:

var cutoffString = '20170421 16:30:00'; // in utc 
var utcCutoff = moment.tz(cutoffString, 'YYYYMMDD HH:mm:ss', '+00:00'); 
var displayCutoff = 
     moment.tz(utcCutoff.format('YYYYMMDD HH:mm:ss'), 'YYYYMMDD HH:mm:ss', 'America/New_York'); 

console.log('utcCutoff:', utcCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => utcCutoff: 20170421 04:30:00pm +00:00 
console.log('displayCutoff:', displayCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => displayCutoff: 20170421 04:30:00pm +00:00 

我在這裏的假設是,displayCutoff將是「美國/紐約」時間顯示utcCutoff時間。但它目前顯示的時間與utcCutoff對象相同。我還應該提到,使用.utc()而不是.tz並試圖在應用.local()後也無法操作時區。

任何幫助/指導,將不勝感激。

+0

[這裏](HTTP://計算器.com/q/43113350/4131048)舉例說明如何轉換時區之間的時刻,以幫助您。 – VincenzoC

回答

1

由於輸入是UTC字符串,因此您可以使用moment.utc。您可以使用tz將您的時刻對象轉換爲給定的時區。

請注意,當您使用moment.tz解析函數時,tz函數會將矩對象轉換爲給定區域,該函數會使用給定區域構建新矩對象。當你這樣做:

var displayCutoff = 
    moment.tz(utcCutoff.format('YYYYMMDD HH:mm:ss'), 'YYYYMMDD HH:mm:ss', 'America/New_York'); 

你是不是轉換utcCutoff'America/New_York'但你在紐約建立一個新的時刻對象20170421 16:30:00

這裏你的代碼的更新版本:

var cutoffString = '20170421 16:30:00'; // in utc 
 
var utcCutoff = moment.utc(cutoffString, 'YYYYMMDD HH:mm:ss'); 
 
var displayCutoff = utcCutoff.clone().tz('America/New_York'); 
 

 
console.log('utcCutoff:', utcCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => utcCutoff: 20170421 04:30:00pm +00:00 
 
console.log('displayCutoff:', displayCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => displayCutoff: 20170421 12:30:00pm -04:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone-with-data-2010-2020.min.js"></script>

+1

這正是我所需要的。我注意到的一件事是,我指出的那個時刻 - 時區0.5.13沒有包含數據,因此仍然以UTC顯示UTC解決方案的時間。當我添加最新的打包數據時,事情就像你的樣本一樣工作。 – rdrw

0

瞬間時區插件正是你所需要的:http://momentjs.com/timezone/

var dec = moment("2014-12-01T12:00:00Z"); 
dec.tz('America/New_York').format('ha z'); // 5am PDT 
相關問題