Почему я получаю утомленное свидание в JavaScript? - PullRequest
0 голосов
/ 15 октября 2019

Я использую дату javascript и пытаюсь получить ее в своем собственном формате (ГГГГ-ММ-ДД). Тем не менее, я мог бы управлять форматом, но проблема в том, что у меня впереди день. Например: если день 3 (сегодня), здесь с этим кодом я получаю 4.

let currentDate = new Date(currentForm['dobs']);
let middleDate = currentDate.toLocaleDateString().split('-');
let finalDate = middleDate[0] + '-' + middleDate[1] + '-' + (middleDate[2] - 1);
 console.log(finalDate);

Здесь, в currentDate я получаю дату как: 2051-06-30T18:15:00.000Z

Но в finalDate я получаю 2049-6-31

Не обращая внимания на синтаксис, почему у меня день впереди? Как добиться правильной даты ??

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Раньше у меня был этот вопрос несколько лет назад, и причина действительно проста. Это из-за символа 'Z' в конце значения даты, потому что для функции .toLocaleDateString () (учитывая, что вы не указали параметры, здесь больше info ) подразумевается, что это значение лежит взона UTC + 0 и по какой-то причине, которая всегда однажды бросает вам голову.

Решение: Чтобы решить эту проблему, у вас есть много вариантов, но, возможно, самый простой - этоотформатируйте дату самостоятельно следующим образом:

function lz(n){return n<10 ? '0'+n : n}
var d = new Date('2019-01-01T00:00:00Z');
var formatted = d.getUTCFullYear()+'-'
    + lz(d.getUTCMonth()+1)+'-'
    + lz(d.getUTCDate())+' '
    + lz(d.getUTCHours())+':'
    + lz(d.getUTCMinutes())+':'
    + lz(d.getUTCSeconds());

Или вы можете использовать сторонние библиотеки, такие как moment.js , что, кстати, довольно популярно. Вот ссылка для получения дополнительной информации.

Редактировать:

Мои извинения Я пропустил одну часть своего кода, поскольку взял его непосредственно уодин из моих проектов. Пожалуйста, следуйте приведенному выше коду или протестируйте его в этой скрипке .

0 голосов
/ 17 октября 2019

Согласно ответу @Alfredo Zamudio, я пытался удалить этот 'Z', прикрепленный в конце моего значения даты, и после этого все в порядке.

let currentDate = new Date(currentForm['dobs']);
let newDate = currentDate.toISOString().replace('Z', '');

После этих строк кода моя проблема была решенаа затем я использовал простую технику для форматирования даты.

let formattedDate = newDate.getFullYear() + '-' + newDate.getMonth() + '-' + newDate.getDate();

Спасибо всем!

...