Работа с датами в 1С

Дата в 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 месяца

 

1 комментарий

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *