| v8: Дата и время в 8.0Ключевые слова: формат, дата, время, РАЗНОСТЬДАТ, ДОБАВИТЬКДАТЕ
 
 
 
 
 Хранение дат в системе
 В базе данных даты хранятся с точностью до секунд.
 Для реквизитов типа "дата" можно установить вариант хранения "дата и время", "только дата", "только время".
 
 Переменные типа "дата" всегда представляют дату с секундами. Отсчет дат ведется с Рождества Христова (наша эра), т.е. с 01.01.0001 00:00:00 по Григорианскому календарю. Начальная дата - это не совсем дата. Это значение в системе используется для представления "пустой даты" (аналог пустой ссылки для ссылочных типов или пустой строки "" для строкового типа).
 
 Максимальная дата - 31.12.3999 23:59:59
 
 Миллисекунды
 На самом деле, переменные типа "дата" хранят дату с миллисекундами, что выясняется путем присвоения дате дробного числа и вычитании исходной даты, например:
 НекаяДата = РабочаяДата();
 НекаяДатаСМиллисекундами = НекаяДата + 0.345;
 Миллисекунды = (НекаяДатаСМиллисекундами - НекаяДата)*1000; //=345
 
 Любой документ в системе имеет дату и время. Все это хранится в поле "Дата" (не ДатаДок, как было в 7.7)
 
 
 
 Другие операции с датами
 Записать месяц прописью: Формат(Дата,"ДММММ"); //25.01.2005 => Январь
 Формат(Дата,"ДДД.ММ.ГГГГ"); //традиционный российский формат 31.12.2005
 
 см. также функцию ОписаниеПериода(Дата1,Дата2)
 
 см. также процедуру ВвестиЗначение и объект ВыборИнтервала (название нужно уточнить)
 
 Для преобразования строки в дату нужно сделать так:
 НекаяДата = Дата("2005-01-05"); //разделители могут быть любые, порядок компонентов даты критичен
 
 Во встроенном языке литералы даты записываются в апострофах. Компоненты даты должны быть по порядку: год, месяц, день, час, минута, секунда. Последние 3 можно опускать, например, не указывать минуты и секунды.
 
 см. также функции НачалоМесяца, КонецМесяца, НачалоДня, КонецДня, НачалоГода, КонецГода и аналогичные.
 
 При формировании отчетов за период не забывайте преобразовывать конечную дату к КОНЦУ ДНЯ.
 
 
 Проверка на пустую дату
 1. Если Дата = '00010101' Тогда
 2. Если Дата = '0001-01-01' Тогда
 3. Если Дата = '00010101000000' Тогда
 
 В типовых конфигурациях есть функция ЗначениеНеЗаполнено, которая использует этот способ.
 
 В запросах можно делать так:
 
 1. ГДЕ Дата = ДАТАВРЕМЯ(0001,01,01,0,0,0)
 2. ГДЕ Дата = &ПустаяДата
 Запрос.УстановитьПараметр("ПустаяДата",'00010101');
 
 
 
 Арифметические операции с датами
 При вычислении разницы между датами результат - это количество СЕКУНД между ними.
 
 Для вычисления разницы в СУТКАХ нужно количество секунд разделить на 86400 (т.е. 24*60*60).
 
 Для получения разницы в рабочих днях нужно завести календарь (регистр сведений) и отсчитывать дни по нему.
 
 При сложении/вычитании даты и какого-то числа оно рассматривается как количество СЕКУНД.
 
 Даты нельзя складывать друг с другом.
 
 Даты можно сравнивать друг с другом (=,<>, >, <, <=, >=). Их также можно передавать в функции Макс и Мин.
 
 
 
 Операции с датами в запросах
 РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>)
 
 Пример:
 
 Выбрать РАЗНОСТЬДАТ(Период, &РабДата, Секунда)
 ИЗ РегистрСведений.КурсыВалют
 
 вместо "Секунда" может быть Минута, Час, День, Месяц, Год
 
 Есть также функция ДОБАВИТЬКДАТЕ
 ДОБАВИТЬКДАТЕ(<Дата>, <Тип>, <Количество>)
 
 Пример:
 
 Выбрать ДОБАВИТЬКДАТЕ(Период, Месяц, 2)
 ИЗ РегистрСведений.КурсыВалют
 
 См. также функции языка запросов:
 НачалоПериода
 КонецПериода
 
 
 
 Другие объектысм. также МоментВремени, метод Сравнить
 метод ПолучитьОтметкуВремени
 |