有没有办法在moment.js 中轻松正确地解析这样的链接?
August 21, 2015: 11:40 AM ET
Run Code Online (Sandbox Code Playgroud)
除了ET以下格式的位(代表东部时间,它是 UTC-4)之外,我设法正确解析了它:
MMMM DD, YYYY: hh:mm tt ET
Run Code Online (Sandbox Code Playgroud)
一些东西:
时区缩写并非都是唯一的。请参阅Wikipedia 上的此列表。例如,CST 有五种不同的含义。
时区缩写没有国际标准。不同的列表可能有不同的值,其中一些值可能是那些地区的人发明的,并没有实际使用。它们也可能因语言而异。
这个特殊的缩写“ET”通常意味着“东部时间”,适用于北美东部时区,尤其是美国和加拿大。它是缩写的通用形式,包括东部标准时间(“EST”,UTC-5)和东部夏令时(“EDT”,UTC-4),以相关日期为准。
另一种表示方法是使用来自 IANA tz 数据库的标识符。这个特定区域最好用 表示"America/New_York"。我们可以将这些标识符与moment-timezone插件一起用于 moment.js。
var input = "August 21, 2015: 11:40 PM ET";
var format = "MMMM D, YYYY: h:mm A";
var timeZone = "America/New_York";
var m = moment.tz(input, format, timeZone);
var output = m.format(); // "2015-08-21T23:40:00-04:00"
Run Code Online (Sandbox Code Playgroud)
请注意,我没有为时区包含任何格式说明符。由于它位于字符串的末尾,因此您可以停在那里。(如果它在字符串中的其他位置,您可以将要忽略的文本放在方括号中。)
另请注意,除了我推荐的格式字符串之外,您建议的格式字符串还有一些其他差异。特别tt适用于 .NET,但它a或A在当下。
在上面的示例中,您必须在外部提供时区。如果您的输入可能来自不同的时区,那么这将不起作用,并且 moment 无法帮助您。您需要单独获取时区作为另一个输入。Moment 不会尝试识别时区缩写,因为我之前描述过它们的含糊性。
还要认识到有一些日期/时间值在时区内会不明确。这发生在夏令时结束的秋季,从而产生重叠的值范围。例如,November 1, 2015: 1:30 AM ET将发生两次,第一次在 EDT,然后在 EST 一个小时后。在这种情况下,时刻将选择第一次出现 - 这恰好是夏令时,而不是标准时间。
| 归档时间: |
|
| 查看次数: |
3486 次 |
| 最近记录: |