toISOstring无法在JavaScript中运行

时间:2015-09-29 12:26:58

标签: javascript timezone

我将日期作为字符串,然后尝试将其转换为ISO。

以下是我一直在做的事情:

var dateValue = "Tue Sep 29 2015 16:50:00 GMT+0530 (IST)"
alert(dateValue.toISOString());

但是这会给我带来以下错误 " toISOString不是一个功能"

为什么会这样?

1 个答案:

答案 0 :(得分:4)

  

为什么会这样?

感谢您的dateValue字符串toISOString不是字符串上的方法(它是在日期上)。

要使用它,您需要一个Date对象。规范中有无保证,您所显示的格式将被JavaScript内置的任何内容成功解析,因此您需要使用 制作的内容对其进行解析保证:您自己的代码,或者像MomentJS这样的库。

如果格式稳定,那么有问题的格式很容易解析:

var months = {
  jan: 0,
  feb: 1,
  mar: 2,
  apr: 3,
  may: 4,
  jun: 5,
  jul: 6,
  aug: 7,
  sep: 8,
  oct: 9,
  nov: 10,
  dec: 11
};
var dateValue = "Tue Sep 29 2015 16:50:00 GMT+0530 (IST)";
var rex = /^.{4}(.{3}) (\d{2}) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT([+-]\d{4})/;
var data = dateValue.match(rex);
snippet.log("Day: " + data[2]);
snippet.log("Month: " + months[data[1].toLowerCase()]);
snippet.log("Year: " + data[3]);
snippet.log("Hour: " + data[4]);
snippet.log("Minute: " + data[5]);
snippet.log("Second: " + data[6]);
snippet.log("Offset: " + data[7]);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

...然后只需使用new Date(year, month, ...)构造函数创建日期,并根据偏移量调整时间(确保使用Date上的UTC方法)。