Javascript的Date对象奇怪的行为

时间:2013-05-22 11:23:39

标签: javascript date unix-timestamp

我正在尝试从格式化日期为dd / mm / yyyy的日期创建一个Date()对象,有时它可以正常工作,有时它不会。例如:

new Date('12/05/2008 00:00:00'); //OK
new Date('13/05/2008 00:00:00'); //Invalid Date????

我在几个具体日期再次发生。我错过了什么吗?

另一个问题是,当我尝试获取创建日期的js时间戳时,它也很奇怪。

(new Date('12/05/2008 00:00:00')).getTime() //Returns 1228428000000
(new Date('01/06/2008 00:00:00')).getTime() //Returns 1199570400000

所以从1970年1月1日到2008年5月12日之间的时间比1970年1月1日到2008年6月1日还要多?

3 个答案:

答案 0 :(得分:0)

javascript根据本地化生成日期。我猜你的本地日期时间格式设置为MM / dd / yyyy而不是dd / MM / yyyy。

所以你可以解析

new Date('12/05/2008 00:00:00');

但不是

new Date('13/05/2008 00:00:00');

看这里13是无效月份。

答案 1 :(得分:0)

它将格式设置为MM/dd/yyyy而不是您认为的格式。所以在你的第一个例子中13/05/2008实际上是第13个月并不存在。

答案 2 :(得分:0)

Date构造函数要求该格式的字符串遵循北美约定来写日期(mm / dd / yyyy)而不是大多数其他国家/地区使用的那些(dd / mm / yyyy),因此您需要在它们之间进行转换:

var date = '22/05/13'; // today's date according to me (I'm British)

date = date.split('/');
date = date[1]+'/'+date[0]+'/'+date[2];

console.log(new Date(date).toString());

但是,为了避免含糊不清,您可能想要使用其他方式输入日期:

var year = 2013, 
    month = 4, // note that months are 0-based when using this approach (i.e. Jan = 0) 
    day = 22;
new Date(year, month, day);