Дата в 1С один из примитивных типов данных в системе. Дата всегда имеет формат год, месяц, день, час, минута, секунда. Таким образом, переменная типа дата содержит не только дату, но и время.
Очевидно, что очень часто программистам приходится работать с датой
Хранение дат в системе
В базе данных даты хранятся с точностью до секунд. Для реквизитов типа «дата» можно установить вариант хранения «дата и время», «только дата», «только время».
Переменные типа «дата» всегда представляют дату с секундами. Отсчет дат ведется с Рождества Христова (наша эра), т.е. с 01.01.0001 00:00:00 по Григорианскому календарю. Начальная дата — это не совсем дата. Это значение в системе используется для представления «пустой даты» (аналог пустой ссылки для ссылочных типов или пустой строки «» для строкового типа).
Максимальная дата — 31.12.3999 23:59:59
Как получить текущую дату и время?
Дата = ТекущаяДата();
Как явно указать нужную дату?
- Литералом встроенного языка вида ‘ГГГГММДДччммсс’ :
'20101103160457' - вернет значение 03.11.2010 16:04:57 '2011.05.09:11:00:05' - получим 09.05.2011 11:00:05
- Функцией глобального контекста Дата():
Дата(2008, 06, 4, 18,45, 23) - вернет значение 04.06.2008 18:45:23 Дата(2011, 2, 16) - вернет значение 16.02.2011 0:00:00
- Если нам необходимо в тексте запроса указать конкретную дату — тогда используем литерал ДАТАВРЕМЯ():
ДАТАВРЕМЯ(2004, 10, 04)
Пустая дата в 1С
В текстах модулей
1. Дата = '00010101' 2. Дата = '00010101000000' 3. Дата = '0001-01-01' 4. Дата = Дата(1,1,1)
В запросе
1. ГДЕ Дата = ДАТАВРЕМЯ(0001,01,01,0,0,0) 2. ГДЕ Дата = &ПустаяДата Запрос.УстановитьПараметр("ПустаяДата", '00010101');
Как соединить дату и время?
Функция СоединитьДатуИВремя(Дата, Время) Экспорт ДатаСтрока = Формат(Дата, "ДФ=""ггггММдд"""); ВремяСтрока = Формат(Время, "ДФ=""ЧЧммсс"""); Результат = Дата(ДатаСтрока + ВремяСтрока); Возврат Результат; КонецФункции
Как сложить две даты
мПустаяДата = '00010101000000'; ПолученнаяДата = мПустаяДата + (Дата1 - мПустаяДата) + (Дата2 - мПустаяДата);
Как вычислить количество дней между двумя датами
- Способ 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’);