2015-09-29 33 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方法)。