我一直在尝试找到一个库或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当然会擦除页面。我将尽量避免这种情况。
时间已经以瞬间.js格式给了我,即 2015-06-04T15:09:06Z,所以我想我可能会找到一种方法通过新的时区插件来做到这一点。
我的回答:
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);
};
};
};
}
这对我来说是一个相当令人费解的事情。我认为它涵盖了所有场景。