Преобразование строки в дату в JavaScript: формат месяцев

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы преобразовать строку в объект Date, можно воспользоваться следующим кодом:

JS
Скопировать код
let dateObject = new Date('2023-03-21');

Данный подход отлично подойдет, если исходная строка представлена в формате ISO 8601 (YYYY-MM-DD или YYYY-MM-DDTHH:mm:ss.sssZ). Он прост и универсален для различных браузеров.

Если же формат даты отличается от стандартного, используйте следующий подход:

JS
Скопировать код
let dateString = "30/11/2011"; 
let parts = dateString.split("/");
// в JavaScript месяцы начинают отсчет с нуля
let dateObject = new Date(parts[2], parts[1] – 1, parts[0]);
Кинга Идем в IT: пошаговый план для смены профессии

Анализ преобразования строки в дату

Приведение строки к объекту Date в JavaScript может оказаться сложной задачей из-за разнообразных реализаций в браузерах. Конструктор new Date() способен обработать несколько форматов дат, однако наиболее надёжным является стандарт ISO 8601. При работе с нестандартными форматами требуется реализовать свой метод парсинга дат.

Советы по работе с месяцами в JavaScript

В JavaScript месяцы индексируются с нуля: январь представлен как 0, декабрь — как 11.

JS
Скопировать код
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():

JS
Скопировать код
let timestamp = Date.parse('2011-11-30T00:00:00.000Z'); 
let dateObject = new Date(timestamp);

Наличие последовательности вызовов

Вы также можете напрямую передать результат Date.parse() в конструктор new Date():

JS
Скопировать код
let dateObject = new Date(Date.parse('2011-11-30T00:00:00.000Z'));

Визуальная аналогия JVM – JavaScript

Представьте себе, что вы настраиваете машину времени, указывая дату:

Markdown
Скопировать код
Формат: "MM-DD-YYYY" или "YYYY-MM-DD" или любой другой формат ISO 8601

И теперь у вас создан объект Date:

JS
Скопировать код
const timeTravelDevice = new Date('2021-12-17');

Активация:

Markdown
Скопировать код
Ввод: "2021-12-17" (обычная строка)
Вывод: Машина времени готова к использованию (надёжный объект Date!)

Ситуации, требующие внимательности

Часовые пояса

При работе с часовыми поясами в ISO-строках используйте Z или +/-HH:MM. В случае отсутствия указания часового пояса время будет интерпретироваться как локальное. Пример:

JS
Скопировать код
let dateString = '2011-11-30T00:00:00Z'; // Это время по UTC
var utcDate = new Date(dateString);

Високосные годы

В високосный год 29 февраля не просто дополнительный день:

JS
Скопировать код
var leapDate = new Date(2020, 1, 29); // Корректно для високосного 2020 года

Обработка различных форматов дат

Форматы дат могут значительно различаться: сегодня вы работаете с форматом DD/MM/YYYY, а завтра приходится столкнуться уже с форматом YYYY-MM-DD. Библиотеки такие как moment.js и date-fns помогут вам в разборе и манипуляции с датами:

JS
Скопировать код
let moment = require('moment');
let dateObject = moment('30/11/2011', 'DD/MM/YYYY').toDate();

Полезные материалы

  1. Date.parse() – JavaScript | MDN
  2. Конструктор Date() – JavaScript | MDN
  3. Regex и форматированные даты DateTime ISO8601 – Stack Overflow
  4. ISO – форматирование даты и времени ISO 8601
  5. Документация Moment.js
  6. date-fns – современная библиотека для работы с датами в JavaScript
  7. Спецификация языка ECMAScript – ECMA-262 Выпуск 5.1