2012-05-01 33 views
0

我想通过使用从数据库中获得的变量来创建一个日期对象。该字符串已经是正确的格式,已经用逗号分隔“yyyy,mm,dd,hh,mm,ss”。然而,试图创建一个Date对象会返回一个Invalid Date错误。JavaScript日期对象不能传递给它的字符串

var foo ='2012,03,09,12,00,00,00'; 
document.write(foo); //<-- obviously writes the string 2012,03,09,12,00,00,00 to the browser 
var then=(new Date(foo)); 
document.write(then); //<-- returns Invalid Date 

我有一个解决方案如下:

var x = foo.split(/[,]/); 
var then = new Date(x[0], x[1], x[2], x[3], x[4], x[5]); 

奇怪,为什么这个时候基本上就是重新创建一个传递给它相同的字符串是必要的。

+2

一个日期是不是字符串。 new Date(x [0],x [1],x [2],x [3],x [4],x [5])不使用字符串,而是使用6个字符串创建Date对象。 –

回答

1

"yyyy,mm,dd,hh,mm,ss"不是日期字符串的“正确格式”。

JavaScript Date对象只能解析特定的格式。检查MDN文档Date有效的dateString s。 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

无论如何。你的第二个例子工作,因为你而不是重新创建字符串,你正在传递6个不同的参数相比,一长一个。

您不能将逗号分隔的字符串传递给一个函数,并期望它将其分解为参数,但它不会以这种方式工作。

+0

您可以通过新日期(yyyy,mm,dd,hh,mm,ss)设置日期,只是想知道为什么使用变量不会采用相同的方式。 – sleestack

+1

,因为你的变量是单个字符串。你正在传递一个参数,而不是6. – epascarello

+1

@rmuser:因为当你做'新日期(yyyy,mm,dd,hh,mm,ss)'时,你传递了6个单独的参数。 'new Date(foo)'只是一个参数。它不会为你分解成不同的参数,JavaScript不会这样工作。 –

相关问题