0

我正在尝试从日期格式的 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 年 12 月 5 日之间经过的时间比 1970 年 1 月 1 日到 2008 年 1 月 6 日之间的时间更长?

4

3 回答 3

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 是无效的月份。

于 2013-05-22T11:28:02.597 回答
0

它将格式解释为MM/dd/yyyy不是您认为的格式。因此,在您的第一个示例13/05/2008中,实际上是第 13 个月,它不存在。

于 2013-05-22T11:28:49.037 回答
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);
于 2013-05-22T11:50:23.610 回答