Работа с датами — практика для новичков
Откуда берётся дата в коде?
1) Конструктор (надёжный способ)
Лето = Дата(2014, 6, 1); // Год, Месяц, День, (часы, минуты, секунды — опционально)
Сообщить(Лето);
2) Текущая дата/время
Сегодня = ТекущаяДата();
Сообщить(Сегодня);
3) Ввод от пользователя
ДатаПользователя = Неопределено; // или '00010101'
ВвестиДату(ДатаПользователя);
ОткрытьЗначение(ДатаПользователя);
Совет: строковый литерал
'YYYYMMDD'удобен для быстрых примеров,
но для вычислений безопаснееДата(Г,М,Д)— меньше шансов ошибиться.
Разбор готовой даты на части
Г = Год(Сегодня);
М = Месяц(Сегодня);
Д = День(Сегодня);
Сообщить(Г + "-" + М + "-" + Д);
Полезные «нормализаторы»:
НачалоСуток = НачалоДня(Сегодня);
КонецСуток = КонецДня(Сегодня);
НачалоМесяца = НачалоМесяца(Сегодня);
КонецМесяца = КонецМесяца(Сегодня);
Арифметика дат: что можно и как правильно
+/- секунды (прямо):
Завтра = Сегодня + 24 * 60 * 60; // сутки = 86400 секунд
Вчера = Сегодня - 24 * 60 * 60;
Сдвиги «календарно» (надёжнее):
ЧерезНеделю = ДобавитьМесяц(Сегодня, 0) + 7 * 24 * 60 * 60; // неделя — ок
ЧерезМесяц = ДобавитьМесяц(Сегодня, 1); // именно календарный месяц
ГодНазад = ДобавитьМесяц(Сегодня, -12);
Почему для месяцев — через
ДобавитьМесяц?
Количество дней в месяце разное. Прибавлять «секундами» легко промахнуться.
Разница между датами (в секундах):
Секунд = '20140101' - '20100101'; // разница как число секунд
Дней = Цел(Секунд / 86400);
Сообщить("Прошло дней: " + Дней);
Календарные функции, которые постоянно выручают
НомерДняНедели = ДеньНедели(Сегодня); // 1..7 (1 — понедельник)
НомерДняГода = ДеньГода(Сегодня); // 1..366
НомерНедели = НеделяГода(Сегодня); // ISO-нумерация
Форматирование даты (красиво вывести)
Текст = Формат(Сегодня, "ДФ='dd.MM.yyyy HH:mm'");
Сообщить(Текст); // например: 12.09.2025 14:35
Мини-кейсы
1) «Через сколько секунд наступит завтра 00:00?»
Сейчас = ТекущаяДата();
Завтра0000 = НачалоДня(Сейчас + 24 * 60 * 60);
СекундДо = Завтра0000 - Сейчас;
Сообщить(СекундДо);
2) «Последний день текущего месяца»
ПоследнийДеньМесяца = КонецДня(КонецМесяца(Сегодня));
Сообщить(ПоследнийДеньМесяца);
3) «Дата следующего месяца в тот же день (или конец месяца, если дня нет)»
ТаЖеДатаВСледМесяце = ДобавитьМесяц(Сегодня, 1);
Сообщить(ТаЖеДатаВСледМесяце);
Частые ошибки и как не попасться
- Складывать «секундами» месяцы/годы. Делай сдвиг месяцами через
ДобавитьМесяц, год —ДобавитьМесяц(…, 12). - Сравнивать «сырые» даты, когда нужна только дата без времени. Нормализуй:
НачалоДня(Дата1) = НачалоДня(Дата2). - Хранить даты строками и пытаться считать. Для вычислений — всегда тип Дата.
- Путать локальный формат вывода с внутренним значением. Для отображения используй
Формат.
Тренировка (с краткими подсказками)
- Функция «ДеньНеделиСтрокой»
Вход: дата. Выход: «понедельник»..«воскресенье».
Подсказка:ДеньНедели()и массив со строками дней. - «Какой сегодня день недели?»
Используй функцию из п.1 +ТекущаяДата(). - «ДР в этом году прошёл?»
Ввод: дата рождения.
- Сформируй дату ДР на текущий год:
Дата(Год(Сегодня), Месяц(Рождения), День(Рождения)). - Сравни с
Сегодня. - Если прошёл — сообщение. Иначе — посчитай секунды до ДР.
- Бонус: «Сколько полных недель осталось до конца месяца?»
Подсказка:КонецМесяца(Сегодня), разница в секундах, делим на7*86400.

Добавить комментарий