1

I am getting the time stamp from a server in following format

"Wed Jan 15 14:17:06 PST 2014"

or

"Wed Jan 15 14:17:06 IST 2014"

when I am doing getTime on second timestamp having IST I am getting NaN . Please take a look below:

when I do:

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

i get output "1389824226000" which is expected

But when i do

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

I get output as NaN.

How can i make getTime work of IST(India Standard Time) also.

4

1 回答 1

5

时区缩写是模棱两可和不一致的。IST 可以是印度标准时间、爱尔兰标准时间或以色列标准时间。

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

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

更新的答案

在您的评论中,您说更改服务器的输出是您无法控制的。好吧,那么您真的应该去找任何有权对服务器进行更改并与他们交谈的人。服务器 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
    

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

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

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

于 2014-01-15T09:17:12.883 回答