dru*_*een 1 javascript date gettime
我从服务器获取以下格式的时间戳
“2014 年太平洋标准时间 1 月 15 日星期三 14:17:06”
或者
“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();
Run Code Online (Sandbox Code Playgroud)
我得到预期的输出“1389824226000”
但当我这样做时
var str = "Wed Jan 15 14:17:06 IST 2014";
var output = new Date(str).getTime();
Run Code Online (Sandbox Code Playgroud)
我得到的输出为 NaN。
我怎样才能使 getTime 也适用于 IST(印度标准时间)。
时区缩写不明确且不一致。IST 可以是印度标准时间、爱尔兰标准时间或以色列标准时间。
PST 有效的唯一原因是它在RFC 822规范(第 5.1 节)以及北美的其他一些规范中被特别提及。该规范正在慢慢消失,取而代之的是ISO 8601,它根本不使用时区缩写。
所以基本上 - 你不应该解析这种格式的字符串 -永远。如果您觉得出于某种原因需要这样做,那么您就遇到了XY Problem。退后一步并解释你的推理,因为可能有更好的方法。
更新答案
在您的评论中,您说更改服务器的输出是您无法控制的。好吧,那么你真的应该去找任何有能力对服务器进行更改的人并与他们交谈。服务器 API 以符合标准且易于使用的方式公开其数据非常重要。由于服务器公开的本质上是一种编造的格式,因此 API 的使用者(例如您自己)将难以处理数据。
是的,这是一种“虚构”的格式。没有包含 IST 作为支持的时区缩写的日期和时间标准。
还有其他方法可以解决这个问题,但这些都是黑客方法,而不是推荐的方法:
您可以从字符串中删除“IST”,并附加“+0530”。大多数浏览器应该会注意到这一点。
new Date(str.replace('IST','') + ' +0530')
Run Code Online (Sandbox Code Playgroud)您可以使用像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
Run Code Online (Sandbox Code Playgroud)这两者都是真正的黑客,因为它们依赖于两个不确定性:
您只会使用来自您的服务器的 IST,并且它永远不会在具有不同时区的地方运行。
该 IST 固定为 +05:30 并且始终如此。许多时区会根据政客的一时兴起而发生变化,并且许多时区每年会因夏令时而发生两次变化。IST 不使用 DST,因此您可以在此处利用它。