Поиск публикаций
Муниципальные услуги

Получите услугу онлайн

Перейти

Дата и Время

Работа с датой, временем, часовыми поясами и арифметикой в WDSP

 Текущее время в разных часовых поясах

дата.сейчас([часовойПояс])

Возвращает объект даты/времени для текущего момента в указанном часовом поясе. Если пояс не указан — возвращает UTC.

ПараметрТипОписание
часовойПояс (необязательный)строкаНазвание пояса на русском языке (например, «Москва», «Нью-Йорк», «Токио» и т.д.)
Возвращает: объект даты (с методами для форматирования, арифметики и т.д.)
Поддерживаемые названия поясов: «UTC», «Москва», «Нью-Йорк», «Токио», «Лондон», «Екатеринбург», «Владивосток», «Калининград» и другие. Полный список зависит от системной базы данных временных зон.
Пример:
₽времяUtc = дата.сейчас();
₽времяМосква = дата.сейчас("Москва");
лог("UTC: " + ₽времяUtc.формат("yyyy-MM-dd HH:mm:ss"));

 Преобразование строки в дату

дата.изСтроки(строка, формат [, часовойПояс])

Создаёт объект даты из строки по указанному формату. Можно указать часовой пояс, в котором интерпретируется исходная строка (по умолчанию UTC).

ПараметрТипОписание
строкастрокаСтрока с датой/временем
форматстрокаШаблон разбора (например, "yyyy-MM-dd HH:mm:ss") или специальное значение "iso" для ISO 8601
часовойПояс (необязательный)строкаПояс, в котором задана строка (по умолчанию "UTC")
Возвращает: объект даты
Пример:
₽дата = дата.изСтроки("2026-12-31T23:59:59Z", "iso");
₽датаМосква = дата.изСтроки("2025-01-15 12:30:45", "yyyy-MM-dd HH:mm:ss", "Москва");

 Арифметика с датами

Объект даты поддерживает методы для добавления и вычитания временных интервалов.

дата.добавитьДни(количество)

дата.добавитьЧасы(количество)

дата.добавитьМесяцы(количество)

дата.добавитьГоды(количество)

Возвращают новый объект даты, изменённый на указанное количество единиц (положительное — вперёд, отрицательное — назад).

Возвращает: новый объект даты

дата.разницаСекунд(другаяДата)

Возвращает разницу в секундах между текущей датой и другой датой (текущая − другая).

Возвращает: число (секунды)
Пример:
₽сейчас = дата.сейчас("Москва");
₽завтра = ₽сейчас.добавитьДни(1);
₽часНазад = ₽сейчас.добавитьЧасы(-1);

 Преобразование между часовыми поясами

дата.вЧасовомПоясе(новыйПояс)

Возвращает новый объект даты, представляющий тот же момент времени, но в другом часовом поясе.

ПараметрТипОписание
новыйПоясстрокаНазвание целевого часового пояса
Возвращает: новый объект даты
Пример:
₽исходнаяДата = дата.изСтроки("2025-03-10 12:00:00", "yyyy-MM-dd HH:mm:ss", "Москва");
₽времяUtc = ₽исходнаяДата.вЧасовомПоясе("UTC");

 Метка времени (Unix timestamp)

дата.время()

Возвращает количество секунд, прошедших с 1 января 1970 года 00:00:00 UTC (Unix timestamp) для данного объекта даты.

Возвращает: число (целое количество секунд)

дата.изМетки(метка [, часовойПояс])

Создаёт объект даты из Unix-метки времени (секунды). Пояс по умолчанию — UTC.

ПараметрТипОписание
меткачислоUnix timestamp (секунды)
часовойПояс (необязательный)строкаПояс для интерпретации метки
Возвращает: объект даты
Пример:
₽метка = дата.сейчас().время();
₽датаИзМетки = дата.изМетки(₽метка, "Москва");

 Компоненты даты

Объект даты предоставляет методы для получения отдельных полей (в текущем часовом поясе объекта):

  • год() – год (число)
  • месяц() – месяц (1–12)
  • день() – день месяца (1–31)
  • час() – час (0–23)
  • минута() – минуты (0–59)
  • секунда() – секунды (0–59)
  • деньНедели() – день недели (1 – понедельник, …, 7 – воскресенье)
  • деньГода() – день года (1–366)
  • високосный()истина если год високосный, иначе ложь
Пример:
₽образец = дата.изСтроки("2024-12-25 08:30:45", "yyyy-MM-dd HH:mm:ss", "Москва");
лог("Год: " + строка(₽образец.год()));

 Сравнение дат

дата.сравнить(другаяДата)

Сравнивает текущую дату с другой. Возвращает отрицательное число, если текущая дата раньше; положительное, если позже; 0 если равны.

ПараметрТипОписание
другаяДатаобъект датыДата для сравнения
Возвращает: число (−1, 0 или 1)
Пример:
если (₽дата1.сравнить(₽дата2) < 0) {
    лог("дата1 раньше");
}

 Форматирование даты

дата.формат([шаблон])

Возвращает строковое представление даты по заданному шаблону. Если шаблон не указан, используется "yyyy-MM-dd HH:mm:ss".

ПараметрТипОписание
шаблон (необязательный)строкаШаблон с подстановками (см. ниже)
Возвращает: строка

дата.строка([шаблон])

Синоним для формат.

Поддерживаемые символы шаблона:

  • yyyy – год (4 цифры)
  • yy – год (2 цифры)
  • MM – месяц (2 цифры, 01–12)
  • M – месяц (1–12)
  • dd – день (2 цифры, 01–31)
  • d – день (1–31)
  • HH – час (0–23, 2 цифры)
  • H – час (0–23)
  • hh – час (0–12, 2 цифры)
  • h – час (0–12)
  • mm – минуты (0–59, 2 цифры)
  • m – минуты (0–59)
  • ss – секунды (0–59, 2 цифры)
  • s – секунды (0–59)
  • SSS – миллисекунды (3 цифры)
Пример:
₽дата.формат("dd.MM.yyyy HH:mm");  // "25.12.2024 08:30"

 Обработка ошибок

Функции модуля могут выбрасывать исключения при некорректных входных данных (неверный формат, неизвестный часовой пояс и т.п.). Их следует перехватывать конструкцией попытка...ловушка.

Пример из теста:
попытка {
    ₽неверная = дата.изСтроки("неправильная строка", "yyyy-MM-dd");
} ловушка (₽ошибка) {
    лог("Ошибка парсинга: " + строка(₽ошибка));
}

 Полный тестовый скрипт

Ниже приведён полный скрипт, демонстрирующий все возможности модуля «дата».

// ============================================================
// Тест модуля дата/время (русские названия часовых поясов)
// ============================================================

функция лог(₽сообщение) {
    вывод("[ДатаТест] " + строка(₽сообщение) + "\n");
}

лог("=== 1. Текущее время в разных часовых поясах ===");
₽времяUtc = дата.сейчас();
лог("UTC: " + ₽времяUtc.формат("yyyy-MM-dd HH:mm:ss"));
лог("Москва: " + дата.сейчас("Москва").формат("yyyy-MM-dd HH:mm:ss"));
лог("Нью-Йорк: " + дата.сейчас("Нью-Йорк").формат("yyyy-MM-dd HH:mm:ss"));
лог("Токио: " + дата.сейчас("Токио").формат("yyyy-MM-dd HH:mm:ss"));
лог("Лондон: " + дата.сейчас("Лондон").формат("yyyy-MM-dd HH:mm:ss"));
лог("Екатеринбург (Челябинск): " + дата.сейчас("Екатеринбург").формат("yyyy-MM-dd HH:mm:ss"));
лог("Владивосток: " + дата.сейчас("Владивосток").формат("yyyy-MM-dd HH:mm:ss"));
лог("Калининград: " + дата.сейчас("Калининград").формат("yyyy-MM-dd HH:mm:ss"));

лог("=== 2. Преобразование строки в дату с часовыми поясами ===");
лог("ISO строка -> UTC: " + дата.изСтроки("2026-12-31T23:59:59Z", "iso").формат());
лог("2025-01-15 12:30:45 по Москве: " + дата.изСтроки("2025-01-15 12:30:45", "yyyy-MM-dd HH:mm:ss", "Москва").формат());
лог("2024-07-20 09:15:00 по Нью-Йорку: " + дата.изСтроки("2024-07-20 09:15:00", "yyyy-MM-dd HH:mm:ss", "Нью-Йорк").формат());
лог("Без ведущих нулей (Владивосток): " + дата.изСтроки("2023-5-7 8:5:2", "yyyy-M-d H:m:s", "Владивосток").формат());

лог("=== 3. Арифметика с датами ===");
₽сейчас = дата.сейчас("Москва");
лог("Завтра в Москве: " + ₽сейчас.добавитьДни(1).формат("yyyy-MM-dd"));
лог("Через неделю: " + ₽сейчас.добавитьДни(7).формат("yyyy-MM-dd"));
лог("Час назад: " + ₽сейчас.добавитьЧасы(-1).формат("yyyy-MM-dd HH:mm:ss"));
лог("Разница между сейчас и через неделю (сек): " + строка(₽сейчас.разницаСекунд(₽сейчас.добавитьДни(7))));
лог("Через месяц: " + ₽сейчас.добавитьМесяцы(1).формат("yyyy-MM-dd"));
лог("Через год: " + ₽сейчас.добавитьГоды(1).формат("yyyy-MM-dd"));

лог("=== 4. Преобразование между часовыми поясами ===");
₽исходнаяДата = дата.изСтроки("2025-03-10 12:00:00", "yyyy-MM-dd HH:mm:ss", "Москва");
лог("Исходная дата в Москве: " + ₽исходнаяДата.формат());
лог("Та же дата в UTC: " + ₽исходнаяДата.вЧасовомПоясе("UTC").формат());
лог("Та же дата в Нью-Йорке: " + ₽исходнаяДата.вЧасовомПоясе("Нью-Йорк").формат());
лог("Та же дата в Токио: " + ₽исходнаяДата.вЧасовомПоясе("Токио").формат());

лог("=== 5. Работа с меткой времени ===");
₽метка = дата.сейчас().время();
лог("Текущая метка времени (сек): " + строка(₽метка));
лог("Дата из метки (UTC): " + дата.изМетки(₽метка, "UTC").формат());
лог("Дата из метки (Москва): " + дата.изМетки(₽метка, "Москва").формат());
лог("Дата из метки (Екатеринбург): " + дата.изМетки(₽метка, "Екатеринбург").формат());

лог("=== 6. Компоненты даты ===");
₽образец = дата.изСтроки("2024-12-25 08:30:45", "yyyy-MM-dd HH:mm:ss", "Москва");
лог("Образец: " + ₽образец.формат());
лог("Год: " + строка(₽образец.год()));
лог("Месяц: " + строка(₽образец.месяц()));
лог("День: " + строка(₽образец.день()));
лог("Час: " + строка(₽образец.час()));
лог("Минута: " + строка(₽образец.минута()));
лог("Секунда: " + строка(₽образец.секунда()));
лог("День недели (1-пн): " + строка(₽образец.деньНедели()));
лог("День года: " + строка(₽образец.деньГода()));
лог("Високосный год? " + строка(₽образец.високосный()));

лог("=== 7. Сравнение дат ===");
₽ранняя = дата.изСтроки("2024-01-01 00:00:00", "yyyy-MM-dd HH:mm:ss", "UTC");
₽поздняя = дата.изСтроки("2024-12-31 23:59:59", "yyyy-MM-dd HH:mm:ss", "UTC");
лог("Раньше < Позже: " + строка(₽ранняя.сравнить(₽поздняя)));
лог("Позже > Раньше: " + строка(₽поздняя.сравнить(₽ранняя)));
лог("Равно: " + строка(₽ранняя.сравнить(₽ранняя)));

лог("=== 8. Тестирование ошибок ===");
попытка { дата.изСтроки("неправильная строка", "yyyy-MM-dd"); }
ловушка (₽ошибка) { лог("Ожидаемая ошибка парсинга: " + строка(₽ошибка)); }
попытка { дата.сейчас("Неизвестный/Город"); }
ловушка (₽ошибка) { лог("Ожидаемая ошибка часового пояса: " + строка(₽ошибка)); }
попытка { дата.изМетки(123, "Марс/Фобос"); }
ловушка (₽ошибка) { лог("Ожидаемая ошибка при изМетки: " + строка(₽ошибка)); }

лог("=== 9. Преобразование даты в строку с разными форматами ===");
₽тестоваяДата = дата.изСтроки("2025-03-15 14:30:00", "yyyy-MM-dd HH:mm:ss", "Москва");
лог("По умолчанию: " + ₽тестоваяДата.строка());
лог("Только дата: " + ₽тестоваяДата.строка("yyyy-MM-dd"));
лог("Только время: " + ₽тестоваяДата.строка("HH:mm:ss"));
лог("Русский формат: " + ₽тестоваяДата.строка("dd.MM.yyyy HH:mm"));

лог("=== Тест модуля дата/время успешно завершён ===");