使用Moment.js或Moment Time Zones,匹配标准时间和夏令时

时间:2016-02-09 23:14:36

标签: javascript jquery datetime timezone momentjs

我一直在努力寻找一个库或JavaScript解决方案来匹配美国一年中不同地区的时间。

问题在于新闻机构也会发布文章并对其进行更新。 该文章可以在6月发布,然后在12月以任何理由更新。

他们坚持他们在他们的时代结束时需要EST和EDT的偏好,但是当情况不匹配时他们不喜欢它。

到目前为止,我已尝试过js和时刻时区(以下输出):

var a = moment("2015-06-04T15:09:06Z");
var b = moment("2015-12-03T16:09:07Z");

a.tz(moment.tz.guess()).format('dddd, MMMM Do YYYY, h:mm a z');
// "Thursday, June 4th 2015, 11:09 am EDT"
b.tz(moment.tz.guess()).format('dddd, MMMM Do YYYY, h:mm a z');
// "Thursday, December 3rd 2015, 11:09 am EST”

您可以看到输出具有不匹配的结束(EDT和EST)。由于它现在是ST,他们想要在EST或CST等中说出正确的时间。当它是夏令时时,他们希望它在EDT,CDT,PDT等中说出正确的时间。

我也试过在JS中编写解决方案,但长话短说,我必须使用renderDate函数来放置很久以前有人创建的日期并使用document.write当然擦除这页纸。我会尽力避免这种情况。

现在已经以moment.js格式给了我时间,即2015-06-04T15:09:06Z所以我想我可以通过新的时区插件找到一种方法。

1 个答案:

答案 0 :(得分:0)

我的回答:

function dst() {
if (wng_pageInfo.containerType === "S") { 

    var postedTime;
    var updatedTime;

    Date.prototype.stdTimezoneOffset = function() {
        var jan = new Date(this.getFullYear(), 0, 1);
        var jul = new Date(this.getFullYear(), 6, 1);
        return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
    }

    Date.prototype.dst = function() {
        return this.getTimezoneOffset() < this.stdTimezoneOffset();
    }

    var today = new Date();
    if (today.dst()) { 
        console.log("Daylight savings time!"); 

        postedTime = moment($('time:first').attr('datetime'));
        postedTimeFormat = postedTime.tz(moment.tz.guess()).format('dddd, MMMM Do YYYY, h:mm a z');
        if (postedTimeFormat.indexOf('ST') !== -1) {
            postedTime = postedTime.tz(moment.tz.guess()).add(1, 'hour').format('dddd, MMMM Do YYYY, h:mm a z');
            postedTime = postedTime.replace('ST','DT');
        } else {
            $('time:first').text(postedTimeFormat);
        };

        updatedTime = moment($('time:last').attr('datetime'));
        updatedTimeFormat = updatedTime.tz(moment.tz.guess()).format('dddd, MMMM Do YYYY, h:mm a z');
        if (updatedTimeFormat.indexOf('ST') !== -1) {
            updatedTime = updatedTime.tz(moment.tz.guess()).add(1, 'hour').format('dddd, MMMM Do YYYY, h:mm a z');
            updatedTime = updatedTime.replace('ST','DT');
            $('time:last').text(updatedTime);
        } else {
            $('time:last').text(updatedTimeFormat);
        };

    } else { 

        console.log("not Daylight savings time"); 

        postedTime = moment($('time:first').attr('datetime'));
        postedTimeFormat = postedTime.tz(moment.tz.guess()).format('dddd, MMMM Do YYYY, h:mm a z');
        if (postedTimeFormat.indexOf('DT') !== -1) {
            postedTime = postedTime.tz(moment.tz.guess()).subtract(1, 'hour').format('dddd, MMMM Do YYYY, h:mm a z');
            postedTime = postedTime.replace('DT','ST');
            $('time:first').text(postedTime);
        } else {
            $('time:first').text(postedTimeFormat);
        }

        updatedTime = moment($('time:last').attr('datetime'));
        updatedTimeFormat = updatedTime.tz(moment.tz.guess()).format('dddd, MMMM Do YYYY, h:mm a z');
        if (updatedTimeFormat.indexOf('DT') !== -1) {
            updatedTime = updatedTime.tz(moment.tz.guess()).subtract(1, 'hour').format('dddd, MMMM Do YYYY, h:mm a z');
            updatedTime = updatedTime.replace('DT','ST');
            $('time:last').text(updatedTime);
        } else {
            $('time:last').text(updatedTimeFormat);
        };
    };
};
}

这对我来说是一个令人费解的事。我认为它涵盖了所有情景。