我正在尝试从格式化日期为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日还要多?
答案 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);