2016-11-20 68 views
0

我有momentjs和moment-timezone。如何将特定时间的时区设置为特定时区,并使用momentjs忽略浏览器的时区?

例如,我有这个字符串作为我的时间:

var myTime = "11/20/2016 8:15 PM"; 

现在我想告诉momentjs认为“数值指明MyTime”是“欧洲/莫斯科”时区是UTC + 3(忽略了浏览器的时区,其是UTC + 3:30)。

然后我想改变UTC的​​时间。

所以我想“指明MyTime对应”是20-11-2016 20:15:00+3:00

,当我将其更改为UTC(),我希望它给我20-11-2016 17:15:00

我所做的就是这是什么:

首先我设置默认的时区:moment.tz.setDefault('Europe/Moscow');

然后我做了这一点:

moment("11/20/2016 8:15 PM").utc().format() 

这段代码做了些什么:2016-11-20T16:45:00+00:00

为什么?因为它首先检查了我的浏览器的UTC + 3:30时区。更改“数值指明MyTime”到欧洲/莫斯科时区,这样moment("11/20/2016 8:15 PM").format()将返回"2016-11-20T19:45:00+03:00"(减去30分钟的数值指明MyTime),然后把它改为UTC导致2016-11-20T16:45:00+00:00

所以我的问题是这样的:

如何设置一个11/20/2016 8:15 PM的时区忽略浏览器的时区,然后将其更改为UTC。

如果我的问题还不清楚,请让我知道,所以我给更多的信息。

+1

当使用非ISO 8601格式的字符串时,您必须使用[时刻分析指定格式](http://momentjs.com/docs/#/parsing/string-format/)。因此,请使用'moment(“2016/11/20 8:15 PM”,'MM/DD/YYYY h:mm A')'而不是'moment(“2016/11/20 8:15 PM”)''。也许添加一个片段或小提琴显示你的问题可以进一步澄清你的问题。 – VincenzoC

回答

1

尝试在创建时刻的对象,这样的指定时区:

var myTime = moment.tz('11/20/2016 8:15 PM', 'MM/DD/YYYY h:mm A', 'Europe/Moscow'); 
 
var utcTime = myTime.clone().utc(); 
 

 
console.log('myTime', myTime.format()); 
 
console.log('utcTime', utcTime.format());
<script src="http://momentjs.com/downloads/moment.js"></script> 
 
<script src="http://momentjs.com/downloads/moment-timezone-with-data.js"></script>

的2 console.log()打印:

myTime 2016-11-20T20:15:00+03:00 
utcTime 2016-11-20T17:15:00Z 

随着utcTime有3小时在myTime之前。

相关问题