2015-09-29 104 views
0

我把日期作为一个字符串,然后试图将其转换为ISO。toISOstring不能在JavaScript中工作

这是我一直在做:

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

不过这回我下面的错误 “toISOString是不是一个函数”

这是为什么?

+3

这是因为'toISOString()'由'Date'对象暴露,而不是字符串。 –

+0

docs https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString – KeepMove

回答

4

这是为什么?

becase的你dateValuetoISOString是不是字符串(它是日期)的方法。

要使用它,您需要一个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方法)。