6

我在 webapp 中使用带有时区的 moment.js 进行日期操作。我将所有日期存储在 UTC 中,并将它们作为 UTC 返回给 UI。我有用户的时区。我想将 UTC 时间转换为本地用户时区。

var timezone = "America/New_York";
var utcDate = "2013-10-16T10:31:59.0537721Z";

var localDate = moment(utcDate).utc().tz(timezone).format()

当我尝试这样做时,我的时间不对。不知道如何让这个工作与时刻

4

4 回答 4

5

你可以试试:

moment.utc(utcDate).tz(timezone).format()

但这应该没关系。他们都应该产生: "2013-10-16T06:31:59-04:00".

它适用于我,在 Chrome 30 上运行,所以它可能与浏览器相关。

如果您在 IE8 上运行 Moment.js 2.3.1 或更早版本,那么这是问题#1175的副作用,该问题已在 2.4.0 中修复。更新到最新版本应该可以解决问题。

于 2013-10-16T15:40:53.487 回答
5

使用+运算符获取 unix 时间,然后:

moment(+moment.utc(utcDate))

这个怎么运作:

  • moment.utc(String)解析字符串并返回一个设置为 UTC 时区的时刻对象。
  • +返回当前对象的 unix 偏移量(以毫秒为单位)
  • moment(Number)使用传入的 unix 偏移量在用户的本地时区创建一个新的时刻对象。
于 2014-08-05T03:05:19.767 回答
4

对于任何有同样问题的人:

您的日期 iso 格式应包含时区。这是 momentjs 允许的格式:

YYYY-MMM-DDTHH:mm:ss+00:00

注意 +00:00 表示它是 UTC

例子

moment('2014-10-03T09:31:18+00:00').format()

会转身

"2014-10-03T17:31:18+08:00"
于 2014-10-03T10:08:38.287 回答
0

即使您不知道时区,您也可以获得客户端偏移量并像这样使用,

let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

试试这个JsFiddle

于 2017-02-03T19:19:34.807 回答