【问题标题】:How to parse ET time with moment.js如何使用 moment.js 解析 ET 时间
【发布时间】:2015-10-01 22:42:08
【问题描述】:

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

August 21, 2015: 11:40 AM ET

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

MMMM DD, YYYY: hh:mm tt ET

【问题讨论】:

  • ET 可能是 EST (UTC-5) 或 EDT (UTC-4)。所以“正确”在这里可能是模棱两可的。
  • @MykWillis:根据http://time.is/EThttp://time.is/EST,ET 是UTC-4,EST 是UTC-5。无论如何,我想这不是重点,我只是想要一种方法来获取包含在解析中的时区的日期。 + 或 - 1 小时就可以了。
  • @cgf - ET 现在是-4,因为 ET 目前在 EDT (UTC-4)。稍后,它将更改回 EST (UTC-5)。

标签: node.js momentjs


【解决方案1】:

一些事情:

  • 时区缩写并非都是唯一的。见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。在这种情况下,moment 将选择 第一次 出现 - 这恰好是白天时间,而不是标准时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多