我有一个字符串'2019年1月24日12:00 PST',其中时间设置为浏览器的时区。我如何利用时刻将其转换为另一个时区(即 - America / New_York),然后在该时区获得时间?
所以在我上面的例子中,我有字符串'201年1月24日12:00 PST',其中时区位于浏览器的时区(西雅图)。我想把它转换成纽约时区'2019年1月24日15:00'。
怎么样:
var s = "Jan 24, 2019 12:00 PST";
var d = new Date(s);
var m = moment(d).tz("America/New_York");
console.log(m.format("MMM DD Y, hh:mm z"));
这里唯一的担心是你得到那个字符串。据我所知,该特定字符串适用于每个浏览器。但是Date构造函数似乎不支持像美国以外的“PST”这样的命名偏移,所以如果你在中欧时间使用CEST,那就不会有用了。在这种情况下,只需切断PST并用Moment的字符串解析函数解析它。由于您已经知道字符串是在用户所在的同一区域中生成的,因此无论如何都不需要它。
作为所有这些的替代方案,避免完全需要该字符串,并从源服务器获取ISO中的日期,或者如果字符串来自其他一些Javascript,只需获取该Date对象并将其直接传递给Moment。
此评论突出显示解析时区如“PST”moment.js - How to parse a date string string with a text timezone like 'PST'?的问题
如果你绝对不能以另一种格式获取字符串,那么你可以做的就是将最后三个字符分开并对一个对象进行自己的比较,如下所示:
var testDate = "Jan 24, 2019 12:00 PST";
var timezones = {
" GMT": " +0000",
" EDT": " -0400",
" EST": " -0500",
" CDT": " -0500",
" CST": " -0600",
" MDT": " -0600",
" MST": " -0700",
" PDT": " -0700",
" PST": " -0800"
};
const fixTimezone = dateStr => {
let zone = dateStr.slice(-4);
let time = dateStr.slice(0, -4);
return time + timezones[zone];
};
let fixedDate = fixTimezone(testDate);
console.log(fixedDate);
console.log(
moment(fixedDate)
.tz("America/New_York")
.format("MMM DD Y, hh:mm z")
);
应该是2019年1月24日,美国东部时间03:00