使用moment.js将Utc日期更改为本地日期

时间:2013-10-16 10:46:43

标签: javascript date datetime timezone momentjs

我正在使用带有时区的moment.js来进行webapp中的日期操作。我将所有日期存储在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 个答案:

答案 0 :(得分:5)

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

moment(+moment.utc(utcDate))

工作原理:

  • moment.utc(String)解析字符串并返回设置为UTC时区的时刻对象。
  • +返回obijct
  • 时刻的unix偏移量(以毫秒为单位)
  • moment(Number)使用传入的unix偏移量在用户的本地时区创建一个新的时刻对象。

答案 1 :(得分:4)

您可以尝试:

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中修复。更新到最新版本应该可以解决问题。

答案 2 :(得分: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"

答案 3 :(得分: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