Работа с датами в 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’;
Дата = ‘00010101′;
Дата = Дата(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 месяца

Один ответ к «Работа с датами в 1С»

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

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