我从服务器获取以下格式的时间戳
“Wed Jan 15 14:17:06 PST 2014”
或
“Wed Jan 15 14:17:06 IST 2014”
当我在拥有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工作。
答案 0 :(得分:3)
Time zone abbreviations含糊不清。 IST可以是印度标准时间,爱尔兰标准时间或以色列标准时间。
PST工作的唯一原因是因为它在RFC 822规范(第5.1节)中特别指出,还有一些针对北美地区。而且这个规范正逐渐消失,转向ISO 8601,而XY Problem根本不使用时区缩写。
基本上 - 你不应该以这种格式解析字符串 - 永远。如果您因某种原因认为自己需要,那么您有一个moment.js。退后一步并解释你的推理,因为可能有更好的方法。
更新了答案
在您的评论中,您说更改服务器的输出是您无法控制的。好吧,那么你真的应该去寻找任何有能力改变服务器并与他们交谈的人。服务器API以符合标准且易于使用的方式公开其数据非常重要。由于服务器正在公开基本上是组成的格式,因此API的消费者(如您自己)将无法处理数据。
是的,它是一种“化妆”格式。没有标准的日期和时间,包括IST作为支持的时区缩写。
还有其他方法可以解决这个问题,但这些都是黑客攻击,并且不是推荐的方法:
您可以从字符串中删除“IST”,并附加“+0530”。大多数浏览器应该接受它。
new Date(str.replace('IST','') + ' +0530')
您可以使用{{3}}这样的库解析它:
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,所以你可以在这里利用它。