【问题标题】:How to set a specific time's timezone to a specific timezone and ignore the browser's timezone with momentjs?如何将特定时间的时区设置为特定时区并使用momentjs忽略浏览器的时区?
【发布时间】:2016-11-20 17:35:07
【问题描述】:

我有 momentjs 和 moment-timezone。

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

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()

momentjs 对这段代码所做的是: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"(从 myTime 中减去 30 分钟),然后将其更改为 UTC,结果为 2016-11-20T16:45:00+00:00

所以我的问题是:

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

如果我的问题仍然不清楚,请告诉我,以便我提供更多信息。

【问题讨论】:

  • 在使用非 ISO 8601 格式的字符串时,您必须使用 moment parsing specifying format。所以使用moment("11/20/2016 8:15 PM", 'MM/DD/YYYY h:mm A') 而不是moment("11/20/2016 8:15 PM")。也许添加一个显示您的问题的 sn-p 或小提琴可以进一步澄清您的问题。

标签: timezone momentjs


【解决方案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>

2console.log()打印:

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

utcTimemyTime 早 3 小时。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 2023-03-10
  • 2014-06-23
  • 2018-11-28
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多