我正在使用 moment.js 和时区在 Web 应用程序中进行日期操作。 我将所有日期存储在 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()
当我尝试这样做时,我得到了错误的时间。 不确定如何与时刻一起工作
你可以试试:
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中修复。 更新到最新版本应该可以解决问题。
使用 +
运算符获取 unix 时间,然后:
moment(+moment.utc(utcDate))
工作原理:
-
moment.utc(String)
分析字符串并返回设置为 UTC 时区的时刻对象。 -
+
返回 unix 偏移量(以毫秒为单位) -
moment(Number)
使用传入的 Unix 偏移量在用户的本地时区创建新的时刻对象。
对于有相同问题的人:
您的日期 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"
即使你不知道时区,你也会得到客户端偏移量并像这样使用,
let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");
试试这个 JsFiddle