Работа с датами в 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’);