Как получить дату и время без секунд?
В зависимости от того, где нужно использовать полученный результат, есть два способа получить дату и время без секунд:
А) Как дату для дальнейшего использования
В этом случае лучше всего воспользоваться функцией НачалоМинуты(), например, так:
ДатаБезСекунд = НачалоМинуты(ТекущаяДата());
Б) Как строку для вывода на печать
Здесь мы можем либо привести значение, полученное на предыдущем шаге, к строке:
ПредставлениеДаты = Строка(ДатаБезСекунд);
Либо воспользоваться функцией Формат() и в одно действие получить нужное представление даты:
ПредставлениеДаты = Формат(ТекущаяДата(), "ДФ='dd.MM.yyyy HH:mm:00'");
ПредставлениеДаты = Формат(НачалоМинуты(ТекущаяДата()), "ДЛФ=DT");
Читайте также:
- Как определить начало и конец периода программно?
- Структура форматной строки
1с как из даты получить время
есть поле дата, формат: дата и время.
нужно, чтоб в реквизит записывалось только время. т.е. тип дата формата время.
как это можно получить?
если формат(), то на выходе строка, а нужно именно дата/время.
время = дата — началодня(дата)
Что значит «дата/время» в контексте «только время»?
Т.е. тебе нужна дата 01.01.0001 ? Ты не можешь «отрезать» дату т.к. это не предусмотрено конструктивом. Но ты можешь через форматную строку её не показывать.
Не припомню я такого формата — время.
(1) даст разницу в секундах. Автор, видимо, хочет в шестидесятиричной системе, с разделителем.
(1) выдает некое количество секунд
А какой смысл? Что тебе надо?
Формат(ТекущаяДата(), «ДЛФ=T»)
(2) когда описываем тип реквизита, если тип дата, то можно выбрать формат: дата, время либо дата время. вот реквизит именно формат время
(6) это дает в результате строку
+(6) Дальше как с датой
время = дата(‘00010101’) + (Дата-НачалоДня(Дата));
(7) При выборе значения формата — Время используется нулевая дата.
(5) да, надо именно так.
(7) В 1С времени без даты не бывает по определению. Как вариант можно использовать «нулевую дату» (01.01.0001) но это черевато возможными траблами в будущем.
поэтому если нужен формат «время», то сохраняйте признак форматной строки и используйте «текущую дату» или например «фиксированную дату» 01.01.2010 (но это зависит от бизнес-логики)
(13) Использование «нулевой» даты является штатным режимом работы с временем в 1С. О каких подводных камнях вы говорите?
Я не услышал, какую прикладныю задачу пытается решить автор, и не представляю, как ему, бедному, помочь.
(10) так получилось, спасибо!!
(14) клиент хочет, чтоб при создание дока в тч можно было проставлять время посещения, чтоб можно было менять, но если не заполнено, то по умолчанию ставилось текущее.
(14) всё что входит в синтаксис — штатно. Но из практики грабли с «нулевой датой» — типичны. к сожалению многие прогеры не проводят контроль на наличие «нулевой даты» (особенно если дата нулевая, а вот время — нет)
(16) Вы неверно оценили задачу.
В прикладном смысле «время посещения» неразрывно связано с датой посещения, поэтому используйте текущую дату полностью!
В форме документа, в колонке табличной части можно указать формат отображения!
В этом случае будет сохраняться правильное значение, а отображаться — нужное по заданию.
В запросе всегда легко можно обрезать дату, оставив время, а вот наоборот — привязать время к дате — уже сложнее. В 1С не определен оператор + для значений типа «Дата».
(17) «Типичные» — они хотябы гуглятся, или только в вашем сознании на уровне рефлексов?
(18) «На уровне рефлексов»: «В 1С не определен оператор + для значений типа «Дата».(с) — это глупости
Дата1 = Дата2 + 200; — нормальный оператор для переменной Дата1, Дата2 с типом дата
1С 8.3 Дата и время — Программист 1С Минск. Автоматизация бизнеса.

ПРИМЕРЫ КОДА 1С
Дата в 1С 8.3 — это примитивный тип данных, который всегда имеет формат: год, месяц, день, час, минута, секунда. Поэтому переменная типа дата содержит не только дату, но и время. Простой способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках вида ‘ГГГГММДДччммсс’ (если часы, минуты и секунды не указывать, то они приравниваются к 00:00:00) где:
ГГГГ — четыре цифры года (включая тысячелетие и век);
ММ — две цифры месяца;
ДД — две цифры даты;
чч — две цифры часа (в 24-х часовом формате);
мм — две цифры минут;
сс — две цифры секунд.

Оглавление:

✔ Работа с датой и временем
Работа с датой и временем в 1С 8.3:
&НаКлиенте
Процедура РаботаСДатойИВременем ( Команда )
// Установка даты в переменную
ТолькоДата = ‘20200415’ ; // 15.04.2020
// Преобразование строки в дату
ТолькоДата = Дата ( «20200415» ); // 15.04.2020
// Преобразование чисел в дату отдельными частями
ТолькоДата = Дата ( 2020 , 04 , 15 ); // 15.04.2020
// Установка в дате: часы, минуты и секунды
ДатаВремя = ‘20200415162703’ ; // 15 апреля 2020 г. 16 ч. 27 мин. 03 сек.
// Получение года (месяца, дня, часа, минуты, секунды) у даты
Год_Даты = Год ( ДатаВремя ); // 2020
Месяц_Даты = Месяц ( ДатаВремя ); // 4
День_Даты = День ( ДатаВремя ); // 15
Час_Даты = Час ( ДатаВремя ); // 16
Минута_Даты = Минута ( ДатаВремя ); // 27
Секунда_Даты = Секунда ( ДатаВремя ); // 03
// Прибавление к дате 3 секунды
Сообщить ( ДатаВремя + 3 ); // 15.04.2020 16:27:06
// Прибавление к дате два месяца
Сообщить ( ДобавитьМесяц ( ДатаВремя , 2 )); // 15.06.2020 16:27:03
// Вычитание от даты одного месяца
Сообщить ( ДобавитьМесяц ( ДатаВремя , — 1 )); // 15.03.2020 16:27:03
// Получение текущей (рабочей) даты
Сообщить ( ТекущаяДата ());
Прибавить день к дате или вычесть день из даты в 1С 8.3:
// вариант 1:
&НаКлиенте
Процедура ОперацииДеньДата ( Команда )
Сообщить ( МатематикаДень ( ‘20200415’ , 1 )); //16.04.2020 0:00:00
Сообщить ( МатематикаДень ( ‘20200415’ , — 1 )); //14.04.2020 0:00:00
&НаКлиенте
Функция МатематикаДень ( Дата , ЧислоДней )
Возврат Дата + 86400 * ЧислоДней ; // 86400 сек.
// или вариант 2 (менее универсальный):
&НаКлиенте
Функция ПолучитьСледующийДень ( Дата )
// с помощью функции КонецДня прибавляем секунду к 15.04.2020 23:59:59
Возврат КонецДня ( Дата )+ 1 ; // и получаем следующий день 16.04.2020 00:00:00
КонецФункции
Дополнительные функции при работе с датой в 1С 8.3:
&НаКлиенте
Процедура ДополнительныеФункцииДаты ( Команда )
// Указываем дату явно:
ДатаВремя = ‘20200415162703’ ; // 15 апреля 2020 г. 16:27:03
//или
ДатаВремя = ‘2020.04.15:16:27:03’ ; // 15 апреля 2020 г. 16:27:03
Сообщить ( ДеньГода ( ДатаВремя )); // 15
Сообщить ( ДеньНедели ( ДатаВремя )); // 3 — Среда (нумерация с понедельника «1»)
Сообщить ( НеделяГода ( ДатаВремя )); // 3 Неделя
Сообщить ( НачалоГода ( ДатаВремя )); // 01.01.2020 0:00:00
Сообщить ( КонецГода ( ДатаВремя )); // 31.12.2020 23:59:59
Сообщить ( НачалоКвартала ( ДатаВремя )); // 01.04.2020 0:00:00
Сообщить ( КонецКвартала ( ДатаВремя )); // 30.06.2020 23:59:59
Сообщить ( НачалоМесяца ( ДатаВремя )); // 01.04.2020 0:00:00
Сообщить ( КонецМесяца ( ДатаВремя )); // 30.04.2020 23:59:59
Сообщить ( НачалоНедели ( ДатаВремя )); // 13.04.2020 0:00:00
Сообщить ( КонецНедели ( ДатаВремя )); // 19.04.2020 23:59:59
Сообщить ( НачалоДня ( ДатаВремя )); // 15.04.2020 0:00:00
Сообщить ( КонецДня ( ДатаВремя )); // 15.04.2020 23:59:59
Сообщить ( НачалоЧаса ( ДатаВремя )); // 15.04.2020 16:00:00
Сообщить ( КонецЧаса ( ДатаВремя )); // 15.04.2020 16:59:59
Сообщить ( НачалоМинуты ( ДатаВремя )); // 15.04.2020 16:27:00
Сообщить ( КонецМинуты ( ДатаВремя )); // 15.04.2020 16:27:59
Преобразование в дату десятисимвольной строки в 1С 8.3:
&НаКлиенте
Процедура ПреобразованиеВДатуСтроки10Симв ( Команда ) // «15.04.2020» преобразуем в ‘15.04.2020 0:00:00’
// Строковая дата без времени преобразовывается в дату со временем:
СтрокаДаты = «15.04.2020» ;
ТолькоДата = Дата ( Сред ( СтрокаДаты , 7 , 4 )+ Сред ( СтрокаДаты , 4 , 2 )+ Сред ( СтрокаДаты , 0 , 2 )); // формат даты ‘15.04.2020 0:00:00’
Проверка на пустое значение даты (заполнение) в 1С 8.3:
&НаКлиенте
Процедура ПроверкаНаПустоеЗначениеДаты ( Команда )
//способ №1
Если ПустаяДата = ‘00010101’ Тогда // или ‘00010101000000’
Сообщить ( «Эта дата пустая» );
КонецЕсли;
//способ №2
Если ПустаяДата = ‘0001–01–01’ Тогда
Сообщить ( «Эта дата пустая» );
КонецЕсли;
//способ №3
Если ПустаяДата = Дата ( 1 , 1 , 1 ) Тогда // или Дата(1, 1, 1, 0, 0, 0)
Сообщить ( «Эта дата пустая» );
КонецЕсли;
//способ №4
Если НЕ ЗначениеЗаполнено ( ПустаяДата ) Тогда
Сообщить ( «Эта дата пустая» );
КонецЕсли;
Проверка на пустое значение даты в Запросе в 1С 8.3:
&НаСервере
Процедура ПроверкаНаПустоеЗначениеДатыВЗапросе ( Команда )
//способ №1
Запрос = Новый Запрос ( «ВЫБРАТЬ
| ДатаРегистрацииЕГР
| ИЗ
| Справочник.Контрагенты
| ГДЕ
| ДатаРегистрацииЕГР = &ПустаяДата» ;
Запрос . УстановитьПараметр ( «ПустаяДата» , ‘00010101’ );
//способ №2
Запрос = Новый Запрос ( «ВЫБРАТЬ
| ДатаРегистрацииЕГР
| ИЗ
| Справочник.Контрагенты
| ГДЕ
| ДатаРегистрацииЕГР = ДАТАВРЕМЯ(1,1,1,0,0,0)» ;
// или ДАТАВРЕМЯ(0001,01,01,0,0,0) или ДАТАВРЕМЯ(1,1,1)
РезультатЗапроса = Запрос . Выполнить (); Записи = РезультатЗапроса . Выбрать ();
Пока Записи . Следующий () Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Сложение двух дат в 1С 8.3:
&НаКлиенте
Функция СложениеДат ( Команда )
ПустаяДата = ‘00010101’ ;
Дата1 = ‘20200415’ ; // 15.04.2020
Дата2 = ‘20220214’ ; // 14.02.2022
Результат = ПустаяДата + ( Дата1 — ПустаяДата ) + ( Дата2 — ПустаяДата );
Сообщить ( «Дата fs10lh1-5 cf2″>+ Результат ); // Дата = 29.05.4041 0:00:00
Сравнение двух дат в 1С 8.3:
&НаКлиенте
Процедура СравнениеДат ( Команда )
Дата1 = ‘20200415’ ; // 15.04.2020
Дата2 = ‘20200415’ ; // 15.04.2020
Если Дата1 . Сравнить ( Дата2 ) = 0 Тогда
Сообщить ( «Даты равны» );
КонецЕсли;
Расчет количества дней между датами в 1С 8.3:
&НаКлиенте
Процедура РасчетКоличестваДнейМеждуДатами ( Команда )
ДатаНач = ‘20200415’ ;
ДатаКон = ‘20200417’ ;
РазницаВСекундах = ДатаКон — ДатаНач ; // 172800 секунды
РазницаВДнях = Цел ( РазницаВСекундах / 86400 ); // 2 дня
Расчет количества дней между датами ЗАПРОСОМ в 1С 8.3:
&НаКлиенте
Процедура РасчетКоличестваДнейМеждуДатамиЗапросом ( Команда )
ДатаНач = ‘20200415’ ;
ДатаКон = ‘20200417’ ;
Сообщить ( РазницаДатНаСервере ( ДатаНач , ДатаКон , «ДЕНЬ» )); //2 дня
&НаСервере
Функция РазницаДатНаСервере ( ДатаНач , ДатаКон , СтрПериод )
//СтрПериод — может быть «ДЕНЬ», «НЕДЕЛЯ», «МЕСЯЦ», «ГОД»
Запрос = Новый Запрос ( «ВЫБРАТЬ РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, » + СтрПериод + «) КАК РазностьДат» );
Запрос . УстановитьПараметр ( «ДатаНач» , ДатаНач );
Запрос . УстановитьПараметр ( «ДатаКон» , ДатаКон );
Возврат Запрос . Выполнить (). Выгрузить ()[ 0 ]. РазностьДат ;
Узнать текущую дату в миллисекундах в 1С 8.3:
&НаКлиенте
Процедура УзнатьТекущуюДатуВМиллисекундах ( Команда )
Сообщить ( ТекущаяУниверсальнаяДатаВМиллисекундах ()); //79 452 791 027 745
// Примечание: не совершайте чужих ошибок:
//
// Чтобы упорядочить данные в порядке поступления, разработчик добавил измерение МоментВремени И заполнил его
// из ТекущаяУниверсальнаяДатаВМиллисекундах(). При поступлении пакета разные наборы данных зарегистрировались одной миллисекундой
// (см.скриншот ниже).
//
// Всё работало, до тех пор, пока в обмен не добавили сценарий «удаляем данные, затем добавляем данные».
// Появилась плавающая ошибка — часть данных теряется. На самом деле данные сперва приходят, потом удаляются, т.к. нарушен порядок.
//
// Вывод: точности миллисекунд может быть недостаточно.
// Вариант решения, например — добавить поле с порядковым номером записи, по всем записям или в рамках секунды.
Момент времени в 1С 8.3:
// Момент времени — комбинация даты и ссылки на документ.
// Момент времени используется в тех случаях, когда важно различать моменты времени для объектов,
// имеющих одинаковую дату и время, например для сравнения положений документов на временной оси.
// То есть позволяет разделить и упорядочить документы в пределах одной секунды,
// выстраивая все документы в однозначную последовательность.
// Получение данных при проведении на момент времени гарантирует,
// что будут учтены движения сделанные в ту же секунду что и проводимый документ,
// но находящиеся перед ним.
// Но есть особенность — документы проведенные в одну и ту же секунду располагаются
// в произвольном порядке, а не в порядке их физического создания (как было в 7.7).
Функция СравнитьДваДокумента ( Док1 , Док2 )
// У «Док1» и «Док2» одинаковая дата и время: 15.04.2020 23:59:59
РезультатСравнения = Док1 . МоментВремени (). Сравнить ( Док2 . МоментВремени () );
Сообщить ( РезультатСравнения );
Возврат РезультатСравнения ;
// Распространенная ошибка в формировании движений документов по регистрам:
// Не знать, что в 1 секунде времени может быть несколько тысяч документов, и для определения последовательности
// использовать поле «Дата» из документа. Необходимо использовать МоментВремени(), который равен Дата + Ссылка.
// И еще нужно иметь ввиду, что Ссылка — это не только УИД, но и идентификатор типа документа.
// Поэтому при упорядочивании внутри одной секунды сначала идут документы одного типа, а потом уже другого.
Работа с датами в 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С
В текстах модулей
Дата
Запрос Запрос