【问题标题】:Using Moment.js or Moment Time Zones, match up Standard time and Daylight Time使用 Moment.js 或 Moment 时区,匹配标准时间和夏令时
【发布时间】:2016-05-20 03:33:05
【问题描述】:

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

问题在于新闻机构发布文章并更新它们。 文章可以在 6 月发表,然后在 12 月以任何理由更新。

他们坚持认为在他们的时代结束时需要 EST 和 EDT,但在案例不匹配时不喜欢它。

到目前为止,我已经尝试过 js 和 moment 时区(下面也有输出):

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+2 等于 4,但事实并非如此。听起来你的工作是让“上层管理人员”了解时区的实际运作方式。我可以建议:codeofmatt.com/2014/04/27/time-zone-abbreviationscodeofmatt.com/2015/02/07/what-is-a-time-zone
  • 更改中间字母不会在全球范围内起作用。想想伦敦,它的缩写是 GMT/BST,和法国,它的缩写是 CET/CEST(以及无数其他的)。

标签: javascript jquery datetime timezone momentjs


【解决方案1】:

我的回答:

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);
        };
    };
};
}

这对我来说是相当令人费解的。我认为它涵盖了所有场景。

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 1970-01-01
    • 2021-01-16
    • 2012-04-07
    • 2015-08-09
    • 2012-06-20
    • 2013-10-13
    • 2014-12-14
    • 2012-03-21
    相关资源
    最近更新 更多