我有一个字符串,'2019年1月24日12:00 pst',其中时间设置为浏览器的时区。我如何利用瞬间将其转换为另一个时区(即 - 美国/new_york),然后在该时区中获得时间?
因此,在上面的示例中,我有" 2019年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"));
这里唯一担心的是您得到该字符串的地方。据我所知,该特定的字符串在每个浏览器中都起作用。但是,日期构造函数似乎并不支持美国以外的" PST"之类的命名偏移,因此,如果您像中欧时代的CEST一样,那将不会完全奏效。在这种情况下,只需切断PST并使用Moment的字符串解析功能对其进行解析。由于您已经知道该字符串是在用户所在的同一区域中生成的,因此您无论如何都不需要它。
作为所有这些的替代方法,请避免完全需要该字符串,然后从源服务器中获得ISO的日期,或者字符串来自其他一些JavaScript,只需获取该日期对象并将其直接传递给力矩。
此评论突出显示了诸如" pst" moment.js之类的解析时区的问题 - 如何用文本时区(如'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")
);
使用Moment timeZone。
应获得2019年1月24日,03:00 EST
https://jsfiddle.net/ethantrawick/xectfsby/12/