如何用moment.js解析ET时间

时间:2015-10-01 22:42:08

标签: node.js momentjs

有没有办法在moment.js中轻松正确地解析像这样的链接?

August 21, 2015: 11:40 AM ET

除了ET位(代表东部时间及其UTC-4)之外,我设法正确解析它,格式如下:

MMMM DD, YYYY: hh:mm tt ET

1 个答案:

答案 0 :(得分:4)

一些事情:

  • 时区缩写并非都是唯一的。见this list on Wikipedia。例如,CST有五种不同的含义。

  • 时区缩写没有国际标准。不同的列表可能具有不同的值,并且这些值中的一些可能是发明的,并且实际上不被这些区域中的人使用。它们也可能因语言而异。

  • 这个特殊的缩写“ET”通常表示“东部时间”,适用于北美的东部时区,特别是美国和加拿大。它是缩写的通用形式,包括东部标准时间(“EST”,UTC-5)和东部夏令时(“EDT”,UTC-4),无论哪个有效有问题的日期。

  • 另一种表示方式是使用IANA tz database中的标识符。此特定区域最好由"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"
    

    请注意,我没有为时区包含任何格式说明符。因为它在字符串的末尾,你可以停在那里。 (如果它在字符串中的其他位置,则可以将文本放在方括号中忽略。)

    另请注意,您提出的格式字符串与我推荐的格式字符串有一些其他差异。特别是tt适用于.NET,但它暂时为aA

  • 在上面的示例中,您必须在外部提供时区。如果您的输入可能来自不同的时区,那么这将无法正常工作,时刻无法帮助您。您需要单独将时区作为另一个输入。由于我之前描述的模糊性,Moment不会尝试识别时区缩写。

  • 还要认识到某些日期/时间值在时区内不明确。这发生在daylight saving time结束时的秋天,创建重叠的值范围。例如,November 1, 2015: 1:30 AM ET将发生两次,首先在EDT中,然后在EST后一小时。在这种情况下,时刻将选择第一个出现 - 恰好是白天时间,而不是标准时间。