Avatar ·

Как получить текущую дату в JavaScript и отформатировать её?

Всем привет! Я только начал изучать JavaScript и столкнулся с простой, на первый взгляд, задачей. Мне нужно на веб-странице (в интернет-магазине) показывать сегодняшнюю дату, например: "Сегодня: 15 марта 2025 года". Я полез в документацию и нашёл объект `Date`. Но когда я пишу простой код: ```javascript let today = new Date(); console.log(today); ``` ...то в консоль выводится что-то вроде: "Sat Mar 15 2025 12:34:56 GMT+0300 (Москва, стандартное время)". Это вообще не тот формат, который мне нужен! Как мне получить просто число, месяц прописью и год? Я пытался разбирать строку через `.split()` или использовать `.getMonth()`, но месяц возвращается числом от 0 до 11, а не названием. Ещё я слышал про библиотеку moment.js, но не хочу подключать целую библиотеку ради одной даты. Подскажите, как на чистом JavaScript красиво получить и отформатировать текущую дату? Буду благодарен за примеры с пояснениями, так как я новичок. <<>>

Понимание объекта Date и его методов

Вы уже на правильном пути: new Date() создаёт объект, который хранит текущий момент времени. Проблема в том, что его стандартное строковое представление не подходит для вывода пользователю. Давайте разберём, как с этим работать.

Для форматирования даты вручную нам понадобятся три основных метода:

  • getDate() — возвращает число месяца (1–31).
  • getMonth() — возвращает номер месяца (0–11, где 0 = январь).
  • getFullYear() — возвращает год (4 цифры).

Решение: создаём массив с названиями месяцев

Так как getMonth() даёт число, мы можем создать массив с русскими названиями месяцев и обращаться к нему по индексу:

// Получаем текущую дату
const today = new Date();

// Массив с названиями месяцев (индексы 0–11)
const monthNames = [
    "января", "февраля", "марта", "апреля", "мая", "июня",
    "июля", "августа", "сентября", "октября", "ноября", "декабря"
];

// Форматируем: число + месяц + год
const day = today.getDate();
const month = monthNames[today.getMonth()]; // превращаем число в название
const year = today.getFullYear();

// Склеиваем строку
const formattedDate = `Сегодня: ${day} ${month} ${year} года`;
console.log(formattedDate); // "Сегодня: 15 марта 2025 года"

Продвинутый способ: Intl.DateTimeFormat

Современный JavaScript предоставляет встроенный объект Intl.DateTimeFormat, который умеет форматировать даты с учётом локали. Это избавляет от ручного создания массива:

const today = new Date();
const formatter = new Intl.DateTimeFormat('ru-RU', {
    day: 'numeric',
    month: 'long',   // полное название месяца (март)
    year: 'numeric'
});
const formattedDate = `Сегодня: ${formatter.format(today)} года`;
console.log(formattedDate); // "Сегодня: 15 марта 2025 года"

Обратите внимание: month: 'long' выдаёт название в именительном падеже ("март"), а не в родительном ("марта"). Если нужно "марта", то проще использовать первый вариант с массивом.

Что выбрать?

  • Массив с названиями — если нужен полный контроль над падежом (например, "15 марта" vs "15 март").
  • Intl.DateTimeFormat — если нужно быстро и без лишнего кода, но вы готовы принять именительный падеж.

Оба подхода работают на чистом JavaScript без внешних библиотек. Для вашей задачи (интернет-магазин) рекомендую использовать массив — так вы сможете легко подставить правильный падеж. Если же дата нужна просто для отображения, Intl.DateTimeFormat будет элегантнее.

Попробуйте оба варианта в консоли браузера и выберите тот, который лучше подходит под ваш дизайн.

<<>>

Альтернатива: форматирование через toLocaleDateString

Если вам не нужен полный контроль над каждым элементом, можно использовать метод toLocaleDateString(). Он принимает локаль и опции, аналогичные Intl.DateTimeFormat, но возвращает строку сразу:

const today = new Date();
const options = { day: 'numeric', month: 'long', year: 'numeric' };
const formattedDate = today.toLocaleDateString('ru-RU', options);
console.log(formattedDate); // "15 марта 2025 г."

Обратите внимание: toLocaleDateString добавляет "г." в конце. Если это не нужно, просто уберите его через .replace(' г.', '') или используйте первый способ.

Этот метод короче, но менее гибкий. Для простых задач — отличный выбор.