Формат utc в 1с
Сталкнулся уже не в первый раз с проблемой преобрабования строки в дату.
К сожалению аналогов strtotime для 1С не нашлось.
Написал ручками по документации к форматам.
Функция преобразует дату форматов
1. Submitted to W3C 15 September 1997
// Дыделим добавку часового пояса
если СимвZ > 0 тогда
ДобавкаЧасов = 0 ;
ДобавкаМинут = 0 ;
иначеесли СимвПлюс > 0 тогда
ДобавкаЧасов = ПроверкаЧисло ( Сред ( СтрокаДаты , СимвПлюс + 12 , 2 ));
ДобавкаМинут = ПроверкаЧисло ( Сред ( СтрокаДаты , СимвПлюс + 15 , 2 ));
иначе
ДобавкаЧасов = - ПроверкаЧисло ( Сред ( СтрокаДаты , СимвМинус + 12 , 2 ));
ДобавкаМинут = - ПроверкаЧисло ( Сред ( СтрокаДаты , СимвМинус + 15 , 2 ));
конецесли;
ДатаЗнч = Дата ( ТолькоДата + Часы + Минуты + Секунды );
ДатаЗнч = ДатаЗнч + ( ДобавкаМинут * 60 + ДобавкаЧасов * 60 * 60 );
возврат ДатаЗнч ;
иначе
// Пробуем формат GNU
// Сначала разобъем на блоки по пробелу
МассивБлоков = новый Массив ;
ИщемНачало = истина;
ТекБлок = "" ;
СтрокаДаты = нрег ( СтрокаДаты );
Для НомерСимволаСтроки = 1 по СтрДлина ( СтрокаДаты ) цикл
ТекСимвол = Сред ( СтрокаДаты , НомерСимволаСтроки , 1 );
если Не ( ТекСимвол = " " или ТекСимвол = "," ) тогда
ТекБлок = ТекБлок + ТекСимвол ;
ИщемНачало = ложь;
продолжить;
иначеесли ИщемНачало тогда
продолжить;
иначе
МассивБлоков . Добавить ( ТекБлок );
ТекБлок = "" ;
ИщемНачало = истина;
конецесли;
конеццикла;
если Не ИщемНачало тогда
МассивБлоков . Добавить ( ТекБлок );
конецесли;
// Теперь МассивБлоков содержит блоки строки даты
// Добавим литералы днейнедели и месяце (можно добавлять еще языки)
Мес = новый Соответствие ;
Мес . Вставить ( "jan" , 1 );
Мес . Вставить ( "feb" , 2 );
Мес . Вставить ( "mar" , 3 );
Мес . Вставить ( "apr" , 4 );
Мес . Вставить ( "may" , 5 );
Мес . Вставить ( "jun" , 6 );
Мес . Вставить ( "jul" , 7 );
Мес . Вставить ( "aug" , 8 );
Мес . Вставить ( "sep" , 9 );
Мес . Вставить ( "sept" , 9 );
Мес . Вставить ( "oct" , 10 );
Мес . Вставить ( "nov" , 11 );
Мес . Вставить ( "dec" , 12 );
Мес . Вставить ( "jan." , 1 );
Мес . Вставить ( "feb." , 2 );
Мес . Вставить ( "mar." , 3 );
Мес . Вставить ( "apr." , 4 );
Мес . Вставить ( "may." , 5 );
Мес . Вставить ( "jun." , 6 );
Мес . Вставить ( "jul." , 7 );
Мес . Вставить ( "aug." , 8 );
Мес . Вставить ( "sep." , 9 );
Мес . Вставить ( "sept." , 9 );
Мес . Вставить ( "oct." , 10 );
Мес . Вставить ( "nov." , 11 );
Мес . Вставить ( "dec." , 12 );
Мес . Вставить ( "january" , 1 );
Мес . Вставить ( "february" , 2 );
Мес . Вставить ( "febr" , 2 );
Мес . Вставить ( "march" , 3 );
Мес . Вставить ( "april" , 4 );
Мес . Вставить ( "may" , 5 );
Мес . Вставить ( "june" , 6 );
Мес . Вставить ( "july" , 7 );
Мес . Вставить ( "august" , 8 );
Мес . Вставить ( "september" , 9 );
Мес . Вставить ( "sept" , 9 );
Мес . Вставить ( "october" , 10 );
Мес . Вставить ( "november" , 11 );
Мес . Вставить ( "december" , 12 );
Мес . Вставить ( "январь" , 1 );
Мес . Вставить ( "февраль" , 2 );
Мес . Вставить ( "март" , 3 );
Мес . Вставить ( "апрель" , 4 );
Мес . Вставить ( "май" , 5 );
Мес . Вставить ( "июнь" , 6 );
Мес . Вставить ( "июль" , 7 );
Мес . Вставить ( "август" , 8 );
Мес . Вставить ( "сентябрь" , 9 );
Мес . Вставить ( "октябрь" , 10 );
Мес . Вставить ( "ноябрь" , 11 );
Мес . Вставить ( "декабрь" , 12 );
Мес . Вставить ( "янв" , 1 );
Мес . Вставить ( "фев" , 2 );
Мес . Вставить ( "мар" , 3 );
Мес . Вставить ( "апр" , 4 );
Мес . Вставить ( "май" , 5 );
Мес . Вставить ( "июн" , 6 );
Мес . Вставить ( "июл" , 7 );
Мес . Вставить ( "авг" , 8 );
Мес . Вставить ( "сен" , 9 );
Мес . Вставить ( "окт" , 10 );
Мес . Вставить ( "ноя" , 11 );
Мес . Вставить ( "дек" , 12 );
Мес . Вставить ( "янв." , 1 );
Мес . Вставить ( "фев." , 2 );
Мес . Вставить ( "мар." , 3 );
Мес . Вставить ( "апр." , 4 );
Мес . Вставить ( "май." , 5 );
Мес . Вставить ( "июн." , 6 );
Мес . Вставить ( "июл." , 7 );
Мес . Вставить ( "авг." , 8 );
Мес . Вставить ( "сен." , 9 );
Мес . Вставить ( "окт." , 10 );
Мес . Вставить ( "ноя." , 11 );
Мес . Вставить ( "дек." , 12 );
ДНед = новый Массив ;
ДНед . Добавить ( "monday" );
ДНед . Добавить ( "tuesday" );
ДНед . Добавить ( "wednesday" );
ДНед . Добавить ( "thursday" );
ДНед . Добавить ( "friday" );
ДНед . Добавить ( "saturday" );
ДНед . Добавить ( "sunday" );
ДНед . Добавить ( "mon" );
ДНед . Добавить ( "tue" );
ДНед . Добавить ( "wed" );
ДНед . Добавить ( "thu" );
ДНед . Добавить ( "fri" );
ДНед . Добавить ( "sat" );
ДНед . Добавить ( "sun" );
ДНед . Добавить ( "понедельник" );
ДНед . Добавить ( "вторник" );
ДНед . Добавить ( "среда" );
ДНед . Добавить ( "четверг" );
ДНед . Добавить ( "пятница" );
ДНед . Добавить ( "суббота" );
ДНед . Добавить ( "воскресенье" );
ДНед . Добавить ( "пн" );
ДНед . Добавить ( "вт" );
ДНед . Добавить ( "ср" );
ДНед . Добавить ( "чт" );
ДНед . Добавить ( "пт" );
ДНед . Добавить ( "сб" );
ДНед . Добавить ( "вс" );
// Текущие данные
День = неопределено;
Месяц = неопределено;
Год = неопределено;
Часов = неопределено;
Минут = неопределено;
Секунд = неопределено;
ЗнакДобавки = 1 ;
ДобавкаЧасов = неопределено;
ДобавкаМинут = неопределено;
ЧасовойПояс = неопределено;
БлокВремениСЧасовымПоясом = неопределено;
БлокДатыСРазделителем = неопределено;
ЧислаХ = новый массив ; // для неопределенных числовых значений
БлокДатыСРазделителем = Блок ;
иначеесли ПроверкаЧисло ( Блок )<>неопределено тогда
// остались день месц год - день должен быть первым при этом
// если месяц числовой то порядок следования год-месяц-день или месяц-день
// а если прописью то допустимы
// day month year
// day month
// month day year
// day-month-year
//
//Or, omitting the year:
// month day
// С этим разберемся потом
ЧислаХ . Добавить ( Число ( Блок ));
иначеесли ( Найти ( Блок , "-" )> 0 )
или ( Найти ( Блок , "/" )> 0 )
или ( Найти ( Блок , "\" )> 0 )
или ( Найти ( Блок , "." )> 0 ) тогда
// может такое 24-sep-72 24/sep/72 24\sep\72 24.sep.72
БлокДатыСРазделителем = Блок ;
конецесли;
КонецЦикла;
// Теперь можно смотреть что есть.
МассивДаты = split ( "/.\" , БлокДатыСРазделителем );
КвоЭл = МассивДаты . Количество ();
если КвоЭл > 2 тогда
Год = МассивДаты [ 2 ];
Месяц = МассивДаты [ 0 ];
День = МассивДаты [ 1 ];
иначе
Год = Год ( ТекущаяДата ());
Месяц = МассивДаты [ 0 ];
День = МассивДаты [ 1 ];
конецесли;
иначе
МассивДаты = split ( "-." , БлокДатыСРазделителем );
если МассивДаты . Количество ()> 2 тогда
// Дата с годом
если ПроверкаЧисло ( МассивДаты [ 1 ])=неопределено тогда
//месяц прописью -формат день-месц-год
Месяц = Мес [ МассивДаты [ 1 ]];
Год = МассивДаты [ 2 ];
День = МассивДаты [ 0 ];
иначе
// месяц числом - формат год-месяц-день
Год = МассивДаты [ 0 ];
Месяц = МассивДаты [ 1 ];
День = МассивДаты [ 2 ];
конецесли;
иначе
// Дата без года
если isset ( Мес [ МассивДаты [ 1 ]]) тогда
// месяц прописью на втором месте - на первом день
Месяц = Мес [ МассивДаты [ 1 ]];
День = МассивДаты [ 0 ];
Год = Год ( ТекущаяДата ());
иначеесли isset ( Мес [ МассивДаты [ 0 ]]) тогда
Месяц = Мес [ МассивДаты [ 0 ]];
День = МассивДаты [ 1 ];
Год = Год ( ТекущаяДата ());
иначе // месяц числом без года
Год = Год ( ТекущаяДата ());
Месяц = МассивДаты [ 0 ];
День = МассивДаты [ 1 ];
КонецЕсли;
конецесли;
конецесли;
иначеесли Месяц <>Неопределено тогда
// Месяц прописью - ищем день и год в ЧислаХ
День = ЧислаХ [ 0 ];
если ЧислаХ . Количество ()> 1 тогда
Год = ЧислаХ [ 1 ];
иначе
Год = Год ( ТекущаяДата ());
конецесли;
иначе // День месяц и годв числаХ
КвоЧисел = ЧислаХ . Количество ();
если КвоЧисел > 2 тогда
// Год месяц день - хотя такого недолжно быть
Год = ЧислаХ [ 0 ];
Месяц = ЧислаХ [ 1 ];
День = ЧислаХ [ 2 ];
иначеесли КвоЧисел > 1 тогда
// Год опущен Месяц - день
Год = Год ( ТекущаяДата ());
Месяц = ЧислаХ [ 0 ];
День = ЧислаХ [ 1 ];
иначеесли КвоЧисел > 0 тогда
// Опущен год и месяц - тоже не должно быть
День = ЧислаХ [ 0 ];
Год = Год ( ТекущаяДата ());
Месяц = Месяц ( ТекущаяДата ());
иначе
// Опущена вся дата
День = День ( ТекущаяДата ());
Год = Год ( ТекущаяДата ());
Месяц = Месяц ( ТекущаяДата ());
конецесли;
КонецЕсли;
// Теперь время
если БлокВремени <>Неопределено тогда
БлокВремени = СтрЗаменить ( БлокВремени , "z" , "" );
БлокВремени = СтрЗаменить ( БлокВремени , "gmt" , "" );
БлокВремени = СтрЗаменить ( БлокВремени , "utc" , "" );
МассивВремени = split ( ":" , БлокВремени , 3 );
КвоЭлементов = МассивВремени . Количество ();
если КвоЭлементов > 2 тогда
// часы минуты секунды
Часов = МассивВремени [ 0 ];
СекТекст = Сред ( МассивВремени [ 2 ], 3 , 4 );
если Найти ( СекТекст , "am" )> 0 или Найти ( СекТекст , "a.m." )> 0 тогда
Часов = ?( Число ( Часов )= 12 , 0 , Число ( Часов ));
иначеесли Найти ( СекТекст , "pm" )> 0 или Найти ( СекТекст , "p.m." )> 0 тогда
Часов = ?( Число ( Часов )= 12 , 12 , Число ( Часов )+ 12 );
конецесли;
Минут = МассивВремени [ 1 ];
Секунд = Лев ( МассивВремени [ 2 ], 2 );
иначеесли КвоЭлементов > 1 тогда
Часов = МассивВремени [ 0 ];
СекТекст = Сред ( МассивВремени [ 1 ], 3 , 4 );
если Найти ( СекТекст , "am" )> 0 или Найти ( СекТекст , "a.m." )> 0 тогда
Часов = ?( Число ( Часов )= 12 , 0 , Число ( Часов ));
иначеесли Найти ( СекТекст , "pm" )> 0 или Найти ( СекТекст , "p.m." )> 0 тогда
Часов = ?( Число ( Часов )= 12 , 12 , Число ( Часов )+ 12 );
конецесли;
Минут = Лев ( МассивВремени [ 1 ], 2 );
Секунд = 0 ;
иначе
// только часы - не может быть, но пробуем
Часов = МассивВремени [ 0 ];
Минут = 0 ;
Секунд = 0 ;
конецесли;
иначе
// время опущено - ставим 0
Часов = 0 ;
Минут = 0 ;
Секунд = 0 ;
// Теперь часовой пояс
ЧасовойПояс = СтрЗаменить ( ЧасовойПояс , "gmt" , "" );
ЧасовойПояс = СтрЗаменить ( ЧасовойПояс , "utc" , "" );
ЧасовойПояс = СтрЗаменить ( ЧасовойПояс , "z" , "" );
ЧасовойПояс = СтрЗаменить ( ЧасовойПояс , ":" , "" );
Если СтрДлина ( ЧасовойПояс ) < 5 тогда
// неизвестный формат пояса
ДобавкаЧасов = 0 ;
ДобавкаМинут = 0 ;
иначе
если Лев ( ЧасовойПояс , 1 )= "+" тогда
ЗнакДобавки = 1 ;
иначеесли Лев ( ЧасовойПояс , 1 )= "-" тогда
ЗнакДобавки = - 1 ;
иначе
// неверный формат добавки
ДобавкаЧасов = 0 ;
ДобавкаМинут = 0 ;
конецесли;
ДобавкаЧасов = Число ( Сред ( ЧасовойПояс , 2 , 2 ))* ЗнакДобавки ;
ДобавкаМинут = Число ( Сред ( ЧасовойПояс , 4 , 2 ))* ЗнакДобавки ;
конецесли;
если Число ( год ) Год = Число ( Год ) + 2000 ;
иначеесли Число ( год ) < 100 тогда
Год = Число ( Год ) + 1900 ;
конецесли;
ДатаЗнч = Дата ( Год , Месяц , День , Часов , Минут , Секунд );
ДатаЗнч = ДатаЗнч + ( ДобавкаМинут * 60 + ДобавкаЧасов * 60 * 60 );
возврат ДатаЗнч ;
//This profile does not specify how many digits may be used to represent the decimal fraction of a second. An adopting standard that permits fractions of a second must specify both the minimum number of digits (a number greater than or equal to one) and the maximum number of digits (the maximum may be stated to be "unlimited").
//This profile defines two ways of handling time zone offsets:
//Times are expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z").
//Times are expressed in local time, together with a time zone offset in hours and minutes. A time zone offset of "+hh:mm" indicates that the date/time uses a local time zone which is "hh" hours and "mm" minutes ahead of UTC. A time zone offset of "-hh:mm" indicates that the date/time uses a local time zone which is "hh" hours and "mm" minutes behind UTC.
//A standard referencing this profile should permit one or both of these ways of handling time zone offsets.
конецесли;
возврат неопределено;
КонецФункции
//////////////////////////////////////////////////////////////////////////////////////
// Функция разбивает строку по разделителям, лимит определяет максимальное количество слов
// аналог split в PHP
Функция split ( СимволыРазделители , строка , лимит = неопределено) экспорт
НоваяСтрока = Строка ;
МассивСлов = новый Массив ;
ИщемНачало = истина;
ТекСлово = "" ;
Для НомерСимволаСтроки = 1 по СтрДлина ( Строка ) цикл
ТекСимвол = Сред ( Строка , НомерСимволаСтроки , 1 );
если Найти ( СимволыРазделители , ТекСимвол )= 0 тогда
ТекСлово = ТекСлово + ТекСимвол ;
ИщемНачало = ложь;
продолжить;
иначеесли ИщемНачало тогда
МассивСлов . Добавить ( "" );
если МассивСлов . Количество ()= лимит тогда
возврат МассивСлов ;
конецесли;
продолжить;
иначе
МассивСлов . Добавить ( ТекСлово );
если МассивСлов . Количество ()= лимит тогда
возврат МассивСлов ;
конецесли;
ТекСлово = "" ;
ИщемНачало = истина;
конецесли;
конеццикла;
если Не ИщемНачало тогда
МассивСлов . Добавить ( ТекСлово );
конецесли;
возврат МассивСлов ;
конецфункции
Функция isset ( Парам )
возврат ?( Парам = неопределено , ложь,истина);
конецфункции
Функция ПроверкаЧисло ( Чс )
попытка
Ло = Число ( Чс );
исключение
возврат неопределено;
конецпопытки;
возврат Ло ;
КонецФункции
В версии 1С 8.2 есть процедуры для работы со временем и часовыми поясами. Основное предназначение этих функций - обеспечение работы филиалов организации, располагающихся в различных часовых поясах.
УниверсальноеВремя(, ) - Преобразует местное время в заданном часовом поясе в универсальное время.
В первом параметре передается время, которое мы хотим перевести в универсальное, во втором - часовой пояс. Если второй параметр не указан, то используется текущий часовой пояс.
Для обратного преобразования используется функция МестноеВремя().
МестноеВремя(, ) - Преобразует универсальное время в местное время заданного часового пояса.
Приведенные ниже примеры преобразуют текущую дату в универсальное время и обратно:
Код 1C v 8.х
Как получить текущее время в виде строки
Код 1C v 8.2 УП
Как получить текущее время в виде даты
Код 1C v 8.2 УП
Похожие FAQ
Еще в этой же категории
Момент Времени и Граница, назначение, примеры использования 39
Момент времени: Фирма 1С описывает так: Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методо Преобразование даты 1С в unixtime (Unix Time Stamp) 17
Как известно, unixtime содержит количество секунд, прошедших с 1 января 1970 года. Поэтому, для преобразования даты 1С в дату unixtime нам всего то нужно от нашей даты отнять дату 01.01.1970 и перевести получившееся значения в удобоваримый формат. Функция месяц прописью 11
// пример от glory01 А = Формат(20020820153309, " ДФ=ММММ" ) // А = " Август" А = Формат(ТекущаяДата(), " ДФ=ММММ" ) // А = " Март" Функция МесяцПрописью(НомерМесяца) Экспорт НомерМесяца=Число(НомерМесяца); Если НомерМесяца = 1 Тогда Воз Как вычислить разницу между двумя датами в месяцах 11
Функция РазницаДатВМесяцах(Дата1, Дата2) Экспорт ДатаНач = ?(Дата1 Дата2, Дата1, Дата2); ДатаКон = ?(Дата1 Дата2, Дата2, Дата1); Годы = Год( датаКон ) - Год( датаНач ); Месяцы = Месяц( датаКон ) - Месяц( датаНач ); Разность = месяцы + Как вычислить разницу между двумя датами в часах и минутах 10
Функция РазностьВремени(Время1, Время2); Разность = Время1 - Время2; Если Разность 0 Тогда Часов = Цел(Разность / 3600); Минут = Цел((Разность - Часов * 3600) / 60); Возврат Дата(1, 1, 1, Часов, Минут, 0); Иначе Возврат Дата(1,1,1,0,0,0); Посмотреть все в категории Работа с Датами (Временем)
В версии 1С 8.2 есть процедуры для работы со временем и часовыми поясами. Основное предназначение этих функций - обеспечение работы филиалов организации, располагающихся в различных часовых поясах.
УниверсальноеВремя(, ) - Преобразует местное время в заданном часовом поясе в универсальное время.
В первом параметре передается время, которое мы хотим перевести в универсальное, во втором - часовой пояс. Если второй параметр не указан, то используется текущий часовой пояс.
Для обратного преобразования используется функция МестноеВремя().
МестноеВремя(, ) - Преобразует универсальное время в местное время заданного часового пояса.
Приведенные ниже примеры преобразуют текущую дату в универсальное время и обратно:
Код 1C v 8.х
Как получить текущее время в виде строки
Код 1C v 8.2 УП
Как получить текущее время в виде даты
Код 1C v 8.2 УП
Похожие FAQ
Еще в этой же категории
Момент Времени и Граница, назначение, примеры использования 39
Момент времени: Фирма 1С описывает так: Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методо Преобразование даты 1С в unixtime (Unix Time Stamp) 17
Как известно, unixtime содержит количество секунд, прошедших с 1 января 1970 года. Поэтому, для преобразования даты 1С в дату unixtime нам всего то нужно от нашей даты отнять дату 01.01.1970 и перевести получившееся значения в удобоваримый формат. Функция месяц прописью 11
// пример от glory01 А = Формат(20020820153309, " ДФ=ММММ" ) // А = " Август" А = Формат(ТекущаяДата(), " ДФ=ММММ" ) // А = " Март" Функция МесяцПрописью(НомерМесяца) Экспорт НомерМесяца=Число(НомерМесяца); Если НомерМесяца = 1 Тогда Воз Как вычислить разницу между двумя датами в месяцах 11
Функция РазницаДатВМесяцах(Дата1, Дата2) Экспорт ДатаНач = ?(Дата1 Дата2, Дата1, Дата2); ДатаКон = ?(Дата1 Дата2, Дата2, Дата1); Годы = Год( датаКон ) - Год( датаНач ); Месяцы = Месяц( датаКон ) - Месяц( датаНач ); Разность = месяцы + Как вычислить разницу между двумя датами в часах и минутах 10
Функция РазностьВремени(Время1, Время2); Разность = Время1 - Время2; Если Разность 0 Тогда Часов = Цел(Разность / 3600); Минут = Цел((Разность - Часов * 3600) / 60); Возврат Дата(1, 1, 1, Часов, Минут, 0); Иначе Возврат Дата(1,1,1,0,0,0); Посмотреть все в категории Работа с Датами (Временем)
Как известно, unixtime содержит количество секунд, прошедших с 1 января 1970 года. Поэтому, для преобразования даты 1С в дату unixtime нам всего то нужно от нашей даты отнять дату 01.01.1970 и перевести получившееся значения в удобоваримый формат.
Код 1C v 8.х
Соответственно, для обратного преобразования нам надо дату unixtime прибавить к дате 01.01.1970:
Код 1C v 8.х
Готовые функции:
Код 1C v 8.х
Похожие FAQ
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= В учетной политике не указан вид тарифа страховых взносов. Как указать? 0
Создайте новую запись учетной политики с начала года - Например 01.01.2013 В учетной смотрите дату начала учетной политики. Поставьте дату начала года (например 01.01.13) закладка появиться должна. Проверьте Тариф страховых взносов: Меню Зарпла Ввести дату, ввод даты 1
ДатаНапоминания = РабочаяДата; Подсказка = "Введите дату и время"; ЧастьДаты = ЧастиДаты.ДатаВремя; Если ВвестиДату(ДатаНапоминания, Подсказка, ЧастьДаты) Тогда // обработка даты напоминания КонецЕсли Если ВвестиДату(Д, "Введите дату ссуды Ввод договоров ГПХ в ЗУП (счет 76) 9
Часто меня спрашивают: Как правильно отразить договор ГПХ в ЗУП? Ниже небольшая, последовательная инструкция: Прием на работу Сведения о физическом лице, выполняющем работы по договору подряда, должны быть внесены в справочник Сотрудники организ Посмотреть все результаты поиска похожих
Еще в этой же категории
Момент Времени и Граница, назначение, примеры использования 39
Момент времени: Фирма 1С описывает так: Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методо Функция месяц прописью 11
// пример от glory01 А = Формат(20020820153309, " ДФ=ММММ" ) // А = " Август" А = Формат(ТекущаяДата(), " ДФ=ММММ" ) // А = " Март" Функция МесяцПрописью(НомерМесяца) Экспорт НомерМесяца=Число(НомерМесяца); Если НомерМесяца = 1 Тогда Воз Как вычислить разницу между двумя датами в месяцах 11
Функция РазницаДатВМесяцах(Дата1, Дата2) Экспорт ДатаНач = ?(Дата1 Дата2, Дата1, Дата2); ДатаКон = ?(Дата1 Дата2, Дата2, Дата1); Годы = Год( датаКон ) - Год( датаНач ); Месяцы = Месяц( датаКон ) - Месяц( датаНач ); Разность = месяцы + Как вычислить разницу между двумя датами в часах и минутах 10
Функция РазностьВремени(Время1, Время2); Разность = Время1 - Время2; Если Разность 0 Тогда Часов = Цел(Разность / 3600); Минут = Цел((Разность - Часов * 3600) / 60); Возврат Дата(1, 1, 1, Часов, Минут, 0); Иначе Возврат Дата(1,1,1,0,0,0); Выбор периода, задать период 8
Посмотреть все в категории Работа с Датами (Временем)
Дата в 1С 8.3 - это примитивный тип данных, который всегда имеет формат: год, месяц, день, час, минута, секунда. Поэтому переменная типа дата содержит не только дату, но и время. Простой способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках вида 'ГГГГММДДччммсс' (если часы, минуты и секунды не указывать, то они приравниваются к 00:00:00) где:
✔ Работа с датой и временем
&НаКлиенте
Процедура РаботаСДатойИВременем ( Команда )
// Установка даты в переменную
ТолькоДата = '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:
&НаКлиенте
Процедура ОперацииДеньДата ( Команда )
Сообщить ( МатематикаДень ( '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
&НаКлиенте
Процедура ДополнительныеФункцииДаты ( Команда )
// Указываем дату явно:
ДатаВремя = '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
Читайте также: