Javascript функция newdate неожиданный вывод - PullRequest
1 голос
/ 02 февраля 2020

Меня смущает результат следующего сценария, и я не понимаю, почему он такой:

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

Этот последний вывод журнала консоли - это то, что я не могу понять. Буду признателен за объяснение того, почему результат такой, какой он есть.

Ответы [ 3 ]

5 голосов
/ 02 февраля 2020

JavaScript обрабатывает месяц как нулевой. Таким образом, вам нужно -1 значение вашего месяца, чтобы получить правильный результат. Как сказал @RobG, вы должны использовать new Date(Date.UTC(...)), чтобы получить дату в UT C

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"
0 голосов
/ 02 февраля 2020

Учитывая, что другие посты, похоже, помогли вам получить правильный месяц, вы пытались использовать метод .toISOString для объекта Date, чтобы получить правильное смещение UT C?

Документы MDN указывает, что часовой пояс всегда равен нулю. UT C смещение.

0 голосов
/ 02 февраля 2020

Проверьте ссылку w3schools.

Вы увидите примечание: «Январь 0, февраль 1 и т. Д.» Так вот как работает дата в JavaScript.

Вам необходимо преобразовать значение месяца в число, а затем сделать его "-1". Так что-то вроде этого:

new Date(datesplit[2], (parseInt(datesplit[1], 10) - 1), datesplit[0])

Редактировать: Ух ты! Не знал, что w3schools - это плохой ресурс! Первый раз получил отрицательный голос за связывание w3schools. Lol.

Вы также можете проверить документацию Mozilla

Или даже Devdocs

...