我有一个字符串,“ Jan 24,2019 12:00 PST”,其中时间设置为浏览器的时区。我将如何利用时间将其转换为另一个时区(即-America / New_York),然后获取该时区的时间?
因此,在上面的示例中,我具有字符串'Jan 24,2019 12:00 PST',其中时区位于浏览器的时区(西雅图)中。将其转换为纽约时区时,我想获取“ 2019年1月24日15:00”。
答案 0 :(得分:3)
此评论着重说明了解析“ 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
答案 1 :(得分:2)
怎么样:
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对象并将其直接传递给片刻。