Работа с датами в 1С
Дата в 1С один из примитивных типов данных в системе. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Очевидно, что очень часто программистам приходится работать с датой и временем и естественно, по мере работы возникают вопросы, ответы на которые приходится где то искать. Я накидал для себя небольшую шпаргалку по работе с датами.
Хранение дат в системе
В базе данных даты хранятся с точностью до секунд. Для реквизитов типа «дата» можно установить вариант хранения «дата и время», «только дата», «только время».
Переменные типа «дата» всегда представляют дату с секундами. Отсчет дат ведется с Рождества Христова (наша эра), т.е. с 01.01.0001 00:00:00 по Григорианскому календарю. Начальная дата — это не совсем дата. Это значение в системе используется для представления «пустой даты» (аналог пустой ссылки для ссылочных типов или пустой строки «» для строкового типа).
Максимальная дата — 31.12.3999 23:59:59
Как получить текущую дату и время?
Дата = ТекущаяДата();
Как явно указать нужную дату?
- Литералом встроенного языка вида ‘ГГГГММДДччммсс’ :
'20201103160457' // вернет значение 03.11.2020 16:04:57 '2021.05.09:11:00:05' // получим 09.05.2021 11:00:05
- Функцией глобального контекста Дата():
Дата(2020, 06, 4, 18,45, 23) // вернет значение 04.06.2020 18:45:23 Дата(2021, 2, 16) // вернет значение 16.02.2021 0:00:00
- Если нам необходимо в тексте запроса указать конкретную дату — тогда используем литерал ДАТАВРЕМЯ():
ДАТАВРЕМЯ(2019, 10, 04)
Пустая дата в 1С
В текстах модулей
Дата = ‘00010101’; Дата = ‘00010101000000’; Дата = ‘0001—01—01′; Дата = Дата(1,1,1);
В запросе
// Первый вариант Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | Т.Ссылка КАК ФизическоеЛицо |ИЗ | Справочник.ФизическиеЛица КАК Т |ГДЕ | ДатаРождения = ДАТАВРЕМЯ(1,1,1,0,0,0)»; // Второй вариант Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | Т.Ссылка КАК ФизическоеЛицо |ИЗ | Справочник.ФизическиеЛица КАК Т |ГДЕ | ДатаРождения = &ПустаяДата»; Запрос.УстановитьПараметр(«ПустаяДата», ‘00010101’);
Как соединить дату и время?
Функция СоединитьДатуИВремя(Дата, Время) Экспорт ДатаСтрока = Формат(Дата, «ДФ=»«ггггММдд»«»); ВремяСтрока = Формат(Время, «ДФ=»«ЧЧммсс»«»); Результат = Дата(ДатаСтрока + ВремяСтрока); Возврат Результат; КонецФункции
Как сложить две даты
ПустаяДата = ‘00010101000000’; ПолученнаяДата = ПустаяДата + (Дата1 — ПустаяДата) + (Дата2 — ПустаяДата);
Как вычислить количество дней между двумя датами
Первый способ — запросом:
Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ | РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,МЕСЯЦ) КАК Месяцев, | РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,ДЕНЬ) КАК Дней»;
Второй способ:
КоличествоДней = (ДатаОкончания — ДатаНачала)/60/60/24;
Как добавить к дате секунду, минуту, час, день
Дата представляет собой количество секунд, прошедших с 1 января 0001 года 00:00:00. Поэтому, чтобы добавить к дате дни, часы, минуты и так далее, нужно прибавить соответствующее количество секунд:
Результат = Дата(2016, 07, 21) + 1; // Прибавили секунду Результат = Дата(2016, 07, 21) + 2 * 60; // Прибавили 2 минуты Результат = Дата(2016, 07, 21) + 60*60*10; // Прибавили 10 часов Результат = Дата(2016, 07, 21) + 5 * 60*60*24; // Прибавили 5 дней
Как добавить или отнять от даты месяц
Результат = ДобавитьМесяц(Дата(2016, 07, 21), 5); // Добавим к дате 5 месяцев Результат = ДобавитьМесяц(Дата(2016, 07, 21), —3) // Отнимаем от даты 3 месяца
ДатаИВремя = ТолькоДата + (ТолькоВремя-‘00010101’);