Date: примеры (JAVASCRIPT)
Date: DateКонструктор Date в JavaScript
Функция Date() в JavaScript является конструктором для создания объектов, представляющих дату и время. Она используется для получения текущей временной метки, парсинга строк, арифметики с датами и форматирования. Объект Date основан на количестве миллисекунд, прошедших с 1 января 1970 года по UTC (Unix Epoch).
Конструктор может быть вызван несколькими способами:
- Без аргументов: возвращает объект с текущей датой и временем.
- С одним аргументом:
- Строка: строка даты для парсинга (например,
'2024-12-31'). - Число: значение в миллисекундах с Unix Epoch.
- Строка: строка даты для парсинга (например,
- С несколькими аргументами:
new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds).- Только
yearиmonthIndexобязательны. - Год задается полностью (2024). Месяц отсчитывается от 0 (январь) до 11 (декабрь).
Возвращаемое значение — объект Date. При вызове как обычной функции (без new) возвращает строку с текущей датой.
Основные примеры использования
Создание даты текущего момента
let now = new Date();
console.log(now);// Вывод зависит от времени выполнения, например: // Tue Oct 31 2023 14:48:00 GMT+0300 (Москва, стандартное время)
Создание из временной метки (timestamp)
let dateFromStamp = new Date(1698768000000);
console.log(dateFromStamp);Mon Oct 31 2022 00:00:00 GMT+0300
Создание из строки
let dateFromString = new Date('2024-12-31T23:59:59');
console.log(dateFromString);Tue Dec 31 2024 23:59:59 GMT+0300
Создание с использованием отдельных компонентов
let specificDate = new Date(2025, 0, 1, 12, 30, 0);
console.log(specificDate);Wed Jan 01 2025 12:30:00 GMT+0300
Получение компонентов даты
let d = new Date('2023-12-25');
console.log(d.getFullYear(), d.getMonth(), d.getDate());2023 11 25
Похожие возможности в JavaScript
Date.now(): возвращает количество миллисекунд с Unix Epoch для текущего момента. Используется для быстрого получения метки без создания объекта.
Date.parse(): парсит строку даты и возвращает временную метку (миллисекунды). Может быть менее надежным из-за различий в форматах.
Date.UTC(): принимает те же аргументы, что и конструктор Date, но возвращает временную метку по UTC, а не по локальному времени.
Intl.DateTimeFormat: объект для форматирования даты и времени с учетом локали. Предпочтителен для отображения дат пользователю.
Для сложных операций с датами часто используют библиотеки, например, Moment.js (устаревшая) или date-fns, которые предлагают более удобный API и поддержку часовых поясов.
Распространенные ошибки
Месяцы с нулевым индексом
// Ожидание января, но месяц 0 - это январь
let date = new Date(2024, 1, 1);
console.log(date.toDateString());Thu Feb 01 2024 // Это 1 февраля, а не января
Проблемы с парсингом строк
// Формат может интерпретироваться по-разному в разных браузерах или локалях
let date = new Date('01/02/2023');
console.log(date); // MM/DD/YYYY или DD/MM/YYYY?Mon Jan 02 2023 00:00:00 GMT+0300 // В РФ часто DD.MM.YYYY, но парсинг может дать MM/DD/YYYY
Игнорирование часовых поясов
let date = new Date('2024-01-01');
console.log(date.toString()); // Создается в UTC, а вывод в локальном времени
console.log(date.toISOString());Mon Jan 01 2024 03:00:00 GMT+0300 2024-01-01T00:00:00.000Z // Разница в 3 часа для Москвы
Использование устаревших методов getYear()
let date = new Date(2024, 0, 1);
console.log(date.getYear()); // Вместо getFullYear()
console.log(date.getFullYear());124 // Возвращает год минус 1900 2024
Изменения и новые возможности
Стандарт ECMAScript продолжает развиваться. В современных версиях JavaScript появилась поддержка временных зон IANA через параметр timeZone в Intl.DateTimeFormat и других методах.
Метод Date.prototype.toLocaleDateString() и подобные теперь имеют расширенные опции форматирования. Также добавлены методы Date.prototype.toTemporalInstant() для интеграции с предлагаемым Temporal API (на стадии предложения).
Temporal API — это новая, находящаяся в разработке, встроенная библиотека для работы с датами и временем, которая должна решить многие проблемы текущего объекта Date, такие как неизменяемость, поддержка часовых поясов и более понятный API.
Расширенные примеры
Вычисление разницы между двумя датами в днях
let date1 = new Date('2024-01-01');
let date2 = new Date('2024-12-31');
let diffTime = Math.abs(date2 - date1);
let diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays);365
Форматирование даты с использованием Intl.DateTimeFormat
let date = new Date();
let formatter = new Intl.DateTimeFormat('ru-RU', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(date));вторник, 31 октября 2023 г.
Добавление дней к дате
function addDays(date, days) {
let result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
let newDate = addDays(new Date('2024-01-01'), 10);
console.log(newDate.toDateString());Thu Jan 11 2024
Получение последнего дня месяца
function getLastDayOfMonth(year, month) {
// Месяц от 0 до 11, создаем дату на 0-й день следующего месяца
return new Date(year, month + 1, 0).getDate();
}
console.log(getLastDayOfMonth(2024, 1)); // Февраль 2024 (високосный)29
Создание диапазона дат
function getDateRange(start, end) {
let range = [];
let current = new Date(start);
while (current <= end) {
range.push(new Date(current));
current.setDate(current.getDate() + 1);
}
return range;
}
let start = new Date('2024-01-01');
let end = new Date('2024-01-05');
console.log(getDateRange(start, end).map(d => d.toISOString().slice(0,10)));['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05']
Аналоги в других языках программирования
PHP
// Функция date()
echo date('Y-m-d H:i:s');
// Класс DateTime
$date = new DateTime('now');
echo $date->format('Y-m-d');2023-10-31 15:30:00 2023-10-31
Python
from datetime import datetime
# Текущая дата и время
now = datetime.now()
print(now.strftime('%Y-%m-%d'))
# Создание из строки
dt = datetime.strptime('2024-12-31', '%Y-%m-%d')
print(dt)2023-10-31 2024-12-31 00:00:00
MySQL
SELECT NOW(), DATE('2024-12-31');2023-10-31 15:30:00 | 2024-12-31
C (библиотека time.h)
#include
time_t t = time(NULL);
struct tm *local = localtime(&t);
printf('%d-%02d-%02d', local->tm_year + 1900, local->tm_mon + 1, local->tm_mday); 2023-10-31
Основные отличия: в JavaScript месяцы начинаются с 0, в Python и PHP обычно с 1. Работа с часовыми поясами также различается.