@timofeus91
Junior Frontend Developer

Как правильно модифицировать дату для value input?

Всем привет! Следующая ситуация - у менять input type="datetime-local" . Через него я передаю данные для создания. Если данные есть, то с бэка они приходят в таком виде - "2022-11-15T20:00:00Z" , а для value, если я правильно понял, они нужны в таком формате "2022-11-15T20:00" . Подскажите , пожалуйста, как так трансформировать дату именно через методы работы с Date? Если это возможно. Обрезать руками и так могу, но хочу сделать это посредством методов Date
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
ВременнАя зона "Z" — это UTC.
А в поле ввода, очевидно, хочется видеть время в часовом поясе браузера пользователя.

Есть несколько способов получить строку формата "YYYY-mm-ddTHH:MM" в часовом поясе браузера. Например, вытаскивать отдельно часы, минуты и т.п. и собирать в строку.
const timeFromBackend = "2022-11-15T20:00:00Z";
const localTime = new Date(timeFromBackend); // 23:00 Msk
const oo = n => n.toString(10).padStart(2, '0');
const YYYY = localTime.getFullYear();
const MM = oo(localTime.getMonth() + 1);
const DD = oo(localTime.getDate());
const HH = oo(localTime.getHours());
const II = oo(localTime.getMinutes());
const localTimeForInput = [YYYY, MM, DD].join('-') + 'T' + [HH, II].join(':');
console.log(localTimeForInput); // 2022-11-15T23:00

Или добавить минуты смещения нашего часового пояса, чтобы получить строку времени сразу целиком:
const timeFromBackend = "2022-11-15T20:00:00Z";
const localTime = new Date(timeFromBackend); // 23:00 Msk
const shiftedTime = new Date(localTime);
shiftedTime.setMinutes(shiftedTime.getMinutes() - shiftedTime.getTimezoneOffset());
const timeForInput = shiftedTime.toISOString().substring(0, 16);
console.log(timeForInput); // "2022-11-15T23:00"


Обратное преобразование из локального времени в поле ввода — в UTC время для бэкенда:
const timeFromInput = "2022-11-15T22:00";
const date = new Date(timeFromInput);
const timeForBackend = date.toISOString().substring(0, 19) + 'Z';
console.log(timeForBackend)  // "2022-11-15T19:00:00Z"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы