Преобразование ISO 8601 в формат yyyy-mm-dd: решение
Быстрый ответ
Для преобразования ISO даты в формат yyyy-mm-dd
используйте комбинацию методов toISOString()
и slice()
:
let isoDate = '2077-11-12T22:00:00.000Z'; // Дата выпуска Cyberpunk 2077
let formattedDate = new Date(isoDate).toISOString().slice(0, 10);
console.log(formattedDate); // Вернёт: 2077-11-12
Просто и лаконично, как хорошо написанный код.
Подробности конвертации дат
Разберём подробнее, как можно преобразовать ISO дату в требуемый формат. В JavaScript существует встроенный объект Date
, с помощью которого мы работаем с датами.
Сначала создаем новый объект Date
, передавая в него строку в формате ISO, затем форматируем полученное значение обратно в строку ISO и отрезаем необходимый фрагмент:
let isoDate = '2077-11-12T22:00:00.000Z'; // Исходная строка в ISO формате
let date = new Date(isoDate); // Преобразуем её в объект Date
let formattedDate = date.toISOString().slice(0, 10); // Обратное преобразование в строку ISO, после чего обрезаем
console.log(formattedDate); // Вернёт "2077-11-12"
Работаем с компонентами даты
Если вам требуется более подробное управление форматированием, можно разделить дату на составные части: год, месяц и день, а затем собрать их в обратном порядке в строку:
let isoDate = '2077-11-12T22:00:00.000Z';
let date = new Date(isoDate);
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0'); // В JavaScript месяцы начинаются с 0
let day = String(date.getDate()).padStart(2, '0'); // Добавляем ведущие нули
let formattedDate = `${year}-${month}-${day}`;
console.log(formattedDate); // Вернёт "2077-11-12"
Подобный подход предоставляет точное управление форматированием каждого компонента даты.
Визуализация
Визуализируйте процесс форматирования ISO даты как алгоритм:
Исходная ISO дата (📜): "2077-11-12T22:00:00.000Z"
Желаемый формат (📅): {yyyy-mm-dd}
Процесс конвертации (📜 ➡️ ✂️ ➡️ 📅): "2077-11-12"
Понятно и явно, как блок-схема программы.
Углубление в конвертацию дат
Роскошь форматирования с toLocaleDateString()
Если требуется дата, отформатированная с учетом локализации, то метод toLocaleDateString()
– это то, что вам нужно:
let isoDate = '2077-11-12T22:00:00.000Z';
let date = new Date(isoDate);
let options = { year: 'numeric', month: '2-digit', day: '2-digit' };
let formattedDate = date.toLocaleDateString('en-CA', options); // Используем канадский стандарт
console.log(formattedDate); // Вернет "2077-11-12"
Идеально подходит для адаптации формата даты к региональным стандартам.
Учёт часовых поясов (UTC)
Если вы работаете с различными часовыми поясами, учитывайте это, испольуя UTC-методы:
let isoDate = '2077-11-12T22:00:00.000Z';
let date = new Date(isoDate);
let year = date.getUTCFullYear();
let month = String(date.getUTCMonth() + 1).padStart(2, '0');
let day = String(date.getUTCDate()).padStart(2, '0');
let formattedDate = `${year}-${month}-${day}`;
console.log(formattedDate); // Вернет "2077-11-12"
Теперь вы готовы обращаться с датами, учитывая разные часовые пояса.
Повышаем уровень: библиотека для работы с датами
В сложных проектах может потребоваться использовать специализированные библиотеки, например, date-fns
или Day.js
:
import dayjs from 'dayjs';
let isoDate = '2023-03-28T15:00:00.000Z';
let formattedDate = dayjs(isoDate).format('YYYY-MM-DD');
console.log(formattedDate); // Вернет "2023-03-28"
Полезные материалы
- Date.prototype.toISOString() – JavaScript | MDN — документация метода
toISOString()
. - Format JavaScript date as yyyy-mm-dd – Stack Overflow — обсуждение форматирования даты на форуме Stack Overflow.
- JavaScript Date Reference — справочник по объекту
Date
в JavaScript. - Format · Day.js — документация по библиотеке Day.js с примерами форматирования дат.
- Moment.js | Docs — документация по библиотеке Moment.js, которая будет полезна в работе с датами.