我有一个格式为“dd-mm-yyyy”的日期字符串,我想将其转换为毫秒。
let split_date = '31-01-2024'.split('-');
let d = new Date(parseInt(split_date[2]), parseInt(split_date[1]), parseInt(split_date[0]), 0, 0, 0, 0).getTime();
console.log(d);
let split_date2 = '02-02-2024'.split('-');
let d2 = new Date(parseInt(split_date2[2]), parseInt(split_date2[1]), parseInt(split_date2[0]), 0, 0, 0, 0).getTime();
console.log(d2);
这给了我 1709317800000 的输出,这似乎是不正确的。我还得到了“02-02-2024”的相同毫秒值。
为什么毫秒值不正确并且多个日期相同?
在
new Date(year, month, day)
构造函数中,month
是从 0 开始的。即一月 = 0,二月 = 1,依此类推。 请参阅文档
所以,
new Date(2024, 1, 31)
实际上试图创造2月31日,这当然不存在。根据内部溢出逻辑,结果是 3 月 2 日(因为 2024 年是闰年,所以非闰年是 3 月 3 日)
当然,在
02-02-2024
上应用代码将调用 new Date(2024, 2, 2)
,这是——遵循 Date
对象的内部逻辑——也是 3 月 2 日......
另请参阅使用您传入的参数创建日期的片段
console.log(new Date(2024, 1, 31, 12));
console.log(new Date(2024, 2, 2, 12))
因此要修复您的代码,您必须从解析的月份中减去
1
。
let split_date = '31-01-2024'.split('-');
let d = new Date(parseInt(split_date[2]), parseInt(split_date[1]) - 1, parseInt(split_date[0]), 0, 0, 0, 0).getTime();
console.log(d);
当使用带有多个参数的
Date
构造函数时,月份应在 0 到 11 之间(而不是 1 到 12 之间)。所以你应该从月份组件中删除 1,这样就可以了。