【问题标题】:Javascript new date(str).getTime() not working for ISTJavascript new date(str).getTime() 不适用于 IST
【发布时间】:2014-01-15 09:06:55
【问题描述】:

我正在从服务器获取以下格式的时间戳

“2014 年 1 月 15 日星期三 14:17:06 PST”

“2014 年 1 月 15 日星期三 14:17:06 IST”

当我在具有 IST 的第二个时间戳上执行 getTime 时 我得到 NaN 。请看下面:

当我这样做时:

var str = "Wed Jan 15 14:17:06 PST 2014";
var output = new Date(str).getTime();

我得到预期的输出“1389824226000”

但是当我这样做时

var str   = "Wed Jan 15 14:17:06 IST 2014";
var output = new Date(str).getTime();

我得到输出为 NaN。

我怎样才能使 IST(印度标准时间)的 getTime 也起作用。

【问题讨论】:

    标签: javascript date gettime


    【解决方案1】:

    Time zone abbreviations 模棱两可且不一致。 IST 可以是印度标准时间、爱尔兰标准时间或以色列标准时间。

    PST 起作用的唯一原因是因为它在 RFC 822 规范(第 5.1 节)中被特别指出,以及北美的其他一些规范。该规范正在慢慢消失,取而代之的是 ISO 8601,它根本不使用时区缩写。

    所以基本上 - 你不应该以这种格式解析字符串 - 永远。如果您觉得出于某种原因需要,那么您有一个XY Problem。退一步解释一下你的推理,因为可能有更好的方法。

    更新答案

    在您的 cmets 中,您说更改服务器的输出是您无法控制的。好吧,那么您真的应该去找任何有权对服务器进行更改并与他们交谈的人。服务器 API 以符合标准且易于使用的方式公开其数据非常重要。由于服务器暴露了本质上是组成的格式,因此 API 的使用者(如您自己)将无法处理数据。

    是的,这是一种“编造”的格式。没有将 IST 作为受支持的时区缩写的日期和时间标准。

    还有其他方法可以解决这个问题,但这些都是技巧,不是推荐的方法:

    • 您可以从字符串中删除“IST”,并附加“+0530”。大多数浏览器都应该接受这一点。

      new Date(str.replace('IST','') + ' +0530')
      
    • 你可以用像moment.js这样的库来解析它:

      var s = str.replace('IST','+05:30');
      var m = moment.parseZone(s,"ddd MMM DD HH:mm:ss Z YYYY");
      
      var output = moment.toDate(); // if you need a js Date object
      var output = moment.format("whatever"); // if you want to reformat a string
      

    这两个都是真正的 hack,因为它们依赖于两个不确定性:

    • 您将只使用来自您的服务器的 IST,它永远不会在不同时区的某个地方运行。

    • IST 固定为 +05:30,并且永远都是。许多时区会根据政客的突发奇想进行更改,并且许多更改每年都会偏移两次以实现夏令时。 IST 不使用 DST,因此您可以在这里利用它。

    【讨论】:

    • 好的,我现在明白了,所以我必须将不一致的时区(如 IST)转换为一些标准时区(如 PST ....)并正确使用它?
    • 没有。您不应该在输入中使用时区缩写。时期。你到底想达到什么目的??
    • 从你的第一句话开始“我正在从以下格式的服务器获取时间戳......”。停在那里。返回您的服务器并使用不同的格式,最好是 ISO 8601 格式的时间戳,例如 2014-01-15T01:23:45+05:30
    • 很抱歉,但这不是我能控制的。我想要达到的是从 1970 年 1 月 1 日午夜到我从服务器获得的时间戳之间的毫秒数
    猜你喜欢
    • 2020-08-23
    • 1970-01-01
    • 2020-01-12
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多