2017-04-20 210 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 
相关问题