2016-03-20 18 views
0

我有一個javascript字符串,我將它拆分爲Date對象的數字,然後使用map轉換爲數字。 Date在分析和映射時不喜歡格式。從字符串中製作JavaScript日期對象使用分割和地圖

這不起作用:

var timeString = '2016-01-01T17:44:32'; 
var dateTime = new Date(timeString.split(/T|:|-/).map(Number)); 

這不起作用:

var timeString = '2016-01-01T17:44:32'; 
var x = timeString.split(/T|:|-/).map(Number); 
var dateTime = new Date(x); 

但尚未這部作品:

var timeString = '2016-01-01T17:44:32'; 
var x = timeString.split(/T|:|-/).map(Number); 
var dateTime = new Date(x[0], x[1], x[2], x[3], x[4], x[5]); 

我猜傳遞到一個數組一個函數或構造函數不會在JavaScript中變平。有什麼我失蹤或第一個例子接近工作?第三種解決方案是醜陋的。

+1

爲什麼不'新的日期( '2016-01-01T17:44:32')'? – TheShellfishMeme

+0

如果你對將數組解包爲函數參數感到好奇,請閱讀'Function.prototype.apply'。儘管如此,它不會與'new'一起工作,所以在這種情況下,您可能首先使用'Date.UTC'來獲取UNIX時間戳並使用它來使用'new'創建Date對象。 – TheShellfishMeme

+0

@TheShellfisheMeme,因爲我想成爲時區不可知論者。它認爲它是UTC。 – atom12

回答

0

javascript日期構造接受下列之一:

  • 無參數,返回與當前日期的日期對象;
  • 日期字符串
  • UNIX時間戳在Millisseconds(Date.now()就是一個很好的例子)
  • 的參數序列,按以下格式:year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]

在你的情況,沒有任何字符串的操作是必要。只需使用下面這段代碼解決了這個問題:

var timeString = '2016-01-01T17:44:32'; 
var dateTime = new Date(timeString); 
console.log(dateTime.getTime()); // 1451670272000 
+0

*「在你的情況下,不需要操縱字符串」*不幸的是,雖然字符串將被可靠地解析,但不同的JavaScript引擎將解析它在不同的時區:有些人會解析它爲UTC,其他人會解析它爲本地時間。這是因爲ES5規範錯了(它表示沒有tz指標= UTC,但ISO-8601 - 它基於的標準 - 表示沒有tz指標=當地時間)。這在ES2015中得到了部分修正(與ISO-8601保持一致),並在ES2106中再次進行了修改(僅限日期的處理方式與日期和時間不同)。 –

0

很簡單,任何數組元素傳遞給一個構造函數作爲參數所有你所要做的就是生成與您的預期數組的新構造。

試試這個:

var timeString = '2016-01-01T17:44:32'; 
 

 
    // now generate new Date Constructor loaded with you array arguments 
 
var arrComponents = timeString.split(/T|:|-/).map(Number); 
 
var newDateConstuctor = Date.bind.apply(Date,arrComponents); 
 

 
var dateTime = new newDateConstuctor();

相關問題