JavaScript 的 Date.parse 与太平洋时间配合良好:
Date.parse('June 20 2015 10:22 PDT')
但是阿拉斯加时间失败了
Date.parse('June 20 2015 10:22 AKDT')
有人知道让阿拉斯加有时间的好解决方案吗?
最佳答案
JavaScript 的 Date.parse()方法接受根据 RFC 2822 格式化的日期字符串或ISO 8601 .
RFC 2822,section 3.3 ,列出有效日期/时间字符串的各个部分。 zone
规则规定时区指示符应该是 UTC 样式的偏移量(例如 -0800),或者是 obs-zone
(过时的)时区指示符。 Section 4.3列出了 obs-zone 指示符,其中包括熟悉的 PDT、CST 等,但不包括 AKDT。
ISO 8601 time zone designators仅限于 UTC。
简而言之,您应该使用 UTC 偏移量来代替 AKDT 等指示符,或者编写一个映射函数来转换这些 obsolete designators在将日期时间字符串传递给 Date.parse() 之前先转换为 UTC。
编辑:
这段代码的算法本质上是有缺陷的。正如 @MattJohnson 在对原始帖子的评论中指出的那样,过时的时区指示符有几个含糊之处 - 例如CST 可以映射到 5 个不同的 UTC 偏移量。因此,没有通用的解决方案可以用 UTC 偏移量替换时区指示符,并确保替换正确。
var timeZoneDesignatorMap = {
akdt : '-0800',
akst : '-0900',
art : '-0300'
// Add other designators here.
};
function mappedDateParse(dateString) {
var name, newDateString, regex;
for (name in timeZoneDesignatorMap) {
regex = new RegExp(name, 'i');
if (dateString.search(regex) !== -1) {
newDateString = dateString.replace(regex, timeZoneDesignatorMap[name]);
return Date.parse(newDateString);
}
}
return Date.parse(dateString);
}
console.log(mappedDateParse('June 20 2015 10:22 AKDT'));
console.log(mappedDateParse('June 20 2015 10:22 -0800'));
console.log(mappedDateParse('June 20 2015 10:22 pDT'));
关于JavaScript Date.parse 不接受阿拉斯加时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056823/