Javascript newdate 函数意外输出

mo_*_*aat 1 javascript date

我对以下脚本的结果感到困惑,我不明白为什么会这样:

enddate = '01-02-2020'; //euro format dd-mm-yyyy
datesplit = enddate.split("-"); 

console.log("datesplit: ", datesplit); //[ '01', '02', '2020' ]
console.log(datesplit[2]); // 2020
console.log(datesplit[1]); // 02
console.log(datesplit[0]); // 01

enddate1 = new Date(datesplit[2],datesplit[1],datesplit[0]);

console.log("enddate 1", enddate1); //output: 2020-03-01T05:00:00.000Z , but I'm expecting 2020-02-01T00:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

最后一个控制台日志输出是我无法理解的。我很感激解释为什么结果是这样的。

Shi*_*iny 5

JavaScript 将月份视为从零开始。因此,您必须使用-1月值才能获得正确的结果。正如@RobG 所说,您应该使用new Date(Date.UTC(...))UTC 来获取您的日期

let endDate = '01-02-2020' // dd-mm-yyyy;
let [day, month, year] = endDate.split('-');

// Months are zero-based, so -1 to get the right month
month = month - 1;

console.log(day);  // '01'
console.log(month);// 1
console.log(year); // '2020'

let newDate = new Date(Date.UTC(year, month, day));

console.log(newDate) // "2020-02-01T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)