Преобразование строки в дату в JavaScript: формат месяцев
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы преобразовать строку в объект Date
, можно воспользоваться следующим кодом:
let dateObject = new Date('2023-03-21');
Данный подход отлично подойдет, если исходная строка представлена в формате ISO 8601 (YYYY-MM-DD
или YYYY-MM-DDTHH:mm:ss.sssZ
). Он прост и универсален для различных браузеров.
Если же формат даты отличается от стандартного, используйте следующий подход:
let dateString = "30/11/2011";
let parts = dateString.split("/");
// в JavaScript месяцы начинают отсчет с нуля
let dateObject = new Date(parts[2], parts[1] – 1, parts[0]);
Анализ преобразования строки в дату
Приведение строки к объекту Date
в JavaScript может оказаться сложной задачей из-за разнообразных реализаций в браузерах. Конструктор new Date()
способен обработать несколько форматов дат, однако наиболее надёжным является стандарт ISO 8601. При работе с нестандартными форматами требуется реализовать свой метод парсинга дат.
Советы по работе с месяцами в JavaScript
В JavaScript месяцы индексируются с нуля: январь представлен как 0
, декабрь — как 11
.
let dateString = "30/11/2011";
let [day, month, year] = dateString.split('/').map(part => parseInt(part, 10));
// Не забывайте вычитать единицу из месяца при создании даты.
let dateObject = new Date(year, month – 1, day);
Использование Date.parse()
Для получения временной метки из корректно оформленной строки вы можете воспользоваться Date.parse()
:
let timestamp = Date.parse('2011-11-30T00:00:00.000Z');
let dateObject = new Date(timestamp);
Наличие последовательности вызовов
Вы также можете напрямую передать результат Date.parse()
в конструктор new Date()
:
let dateObject = new Date(Date.parse('2011-11-30T00:00:00.000Z'));
Визуальная аналогия JVM – JavaScript
Представьте себе, что вы настраиваете машину времени, указывая дату:
Формат: "MM-DD-YYYY" или "YYYY-MM-DD" или любой другой формат ISO 8601
И теперь у вас создан объект Date
:
const timeTravelDevice = new Date('2021-12-17');
Активация:
Ввод: "2021-12-17" (обычная строка)
Вывод: Машина времени готова к использованию (надёжный объект Date!)
Ситуации, требующие внимательности
Часовые пояса
При работе с часовыми поясами в ISO-строках используйте Z
или +/-HH:MM
. В случае отсутствия указания часового пояса время будет интерпретироваться как локальное. Пример:
let dateString = '2011-11-30T00:00:00Z'; // Это время по UTC
var utcDate = new Date(dateString);
Високосные годы
В високосный год 29 февраля не просто дополнительный день:
var leapDate = new Date(2020, 1, 29); // Корректно для високосного 2020 года
Обработка различных форматов дат
Форматы дат могут значительно различаться: сегодня вы работаете с форматом DD/MM/YYYY
, а завтра приходится столкнуться уже с форматом YYYY-MM-DD
. Библиотеки такие как moment.js
и date-fns
помогут вам в разборе и манипуляции с датами:
let moment = require('moment');
let dateObject = moment('30/11/2011', 'DD/MM/YYYY').toDate();
Полезные материалы
- Date.parse() – JavaScript | MDN
- Конструктор Date() – JavaScript | MDN
- Regex и форматированные даты DateTime ISO8601 – Stack Overflow
- ISO – форматирование даты и времени ISO 8601
- Документация Moment.js
- date-fns – современная библиотека для работы с датами в JavaScript
- Спецификация языка ECMAScript – ECMA-262 Выпуск 5.1