Moment JS-如何从其他时区获取时间

时间:2019-02-27 01:05:54

标签: javascript timezone momentjs

我有一个字符串,“ Jan 24,2019 12:00 PST”,其中时间设置为浏览器的时区。我将如何利用时间将其转换为另一个时区(即-America / New_York),然后获取该时区的时间?

因此,在上面的示例中,我具有字符串'Jan 24,2019 12:00 PST',其中时区位于浏览器的时区(西雅图)中。将其转换为纽约时区时,我想获取“ 2019年1月24日15:00”。

2 个答案:

答案 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")
);

使用moment-timezone.

应于2019年1月24日美国东部时间03:00

https://jsfiddle.net/ethantrawick/xectfsby/12/

答案 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对象并将其直接传递给片刻。