两个日期的日期毫秒相同

问题描述 投票:0回答:2

我有一个格式为“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”相同的毫秒值。

为什么毫秒值不正确并且多个日期相同?

javascript date datetime
2个回答
0
投票

当使用带有多个参数的

Date
构造函数时,月份应在 0 到 11 之间(而不是 1 到 12 之间)。所以你应该从月份组件中删除 1,这样就可以了。


0
投票

new Date(year, month, day)
构造函数中,
month
是从 0 开始的。即一月 = 0,二月 = 1,依此类推。 请参阅文档

所以,

new Date(2024, 1, 31)
实际上试图创造2月31日,这当然不存在。通过内部溢出逻辑,结果是 3 月 2 日。

当然,在

02-02-2024
上应用代码将调用
new Date(2024, 2, 2)
,这是——遵循
Date
对象的内部逻辑,也是 3 月 2 日......

因此要修复您的代码,您必须从解析的月份中减去

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(); 控制台.log(d);

console.log(new Date(2024, 1, 31, 12));
console.log(new Date(2024, 2, 2, 12))

© www.soinside.com 2019 - 2024. All rights reserved.