2013-10-16 168 views
5

我使用带时区的moment.js在Web应用程序中进行日期操作。我将所有日期存储在UTC中,并将它们作为UTC返回给用户界面。我有用户的时区。我想将UTC时间转换为本地用户时区。使用moment.js将Utc日期更改为本地日期

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

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

当我试图做到这一点我得到错误的时间。不知道怎么去用那一刻

回答

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

5

使用+接线员给UNIX时间,则:

moment(+moment.utc(utcDate)) 

工作原理:

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

我upvoted这个答案,因为没有downvoting指定一个原因是没用的。 –

4

具有相同问题的人:

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

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

通知+00:00意味着它是UTC

例如

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

将terturn

"2014-10-03T17:31:18+08:00" 
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