Получение частей даты
С помощью функций Год, Месяц, День, Час, Минута, Секунда из даты можно получить какую-либо ее часть:
Дата = Дата(2021, 6, 3, 12, 15, 6);
//3 июня 2021 года, 12 часов, 15 минут, 6 секунд
Год = Год(Дата); //2021
Месяц = Месяц(Дата); //6
День = День(Дата); //3
Час = Час(Дата); //12
Минута = Минута(Дата); //15
Секунда = Секунда(Дата); //6
День года и день недели
Функция День возвращает порядковый номер в месяце. То есть для 3 июня это будет 3. Функция ДеньГода вернет порядковый номер дня в году:
Дата = Дата(2021, 6, 3, 12, 15, 6);
//3 июня 2021 года, 12 часов, 15 минут, 6 секунд
ДеньГода = ДеньГода(Дата); //154
Для определения дня недели есть функция ДеньНедели, которая возвращает порядковый номер дня недели:
Дата = Дата(2021, 6, 3, 12, 15, 6);
//3 июня 2021 года, 12 часов, 15 минут, 6 секунд
ДеньНедели = ДеньНедели(Дата); //4
Если ДеньНедели = 1 Тогда
Сообщить("Понедельник");
ИначеЕсли ДеньНедели = 2 Тогда
Сообщить("Вторник");
ИначеЕсли ДеньНедели = 3 Тогда
Сообщить("Среда");
ИначеЕсли ДеньНедели = 4 Тогда
Сообщить("Четверг");
ИначеЕсли ДеньНедели = 5 Тогда
Сообщить("Пятница");
ИначеЕсли ДеньНедели = 6 Тогда
Сообщить("Суббота");
ИначеЕсли ДеньНедели = 7 Тогда
Сообщить("Воскресенье");
КонецЕсли;
Начало и конец периода
Чтобы привести дату к началу определенного периода можно использовать функции НачалоМинуты, НачалоЧаса, НачалоДня, НачалоНедели, НачалоМесяца, НачалоКвартала, НачалоГода:
Дата = Дата(2021, 6, 3, 12, 15, 6); //3 июня 2021 года, 12 часов, 15 минут, 6 секунд
НачалоМинуты = НачалоМинуты(Дата); //3 июня 2021 года, 12 часов, 15 минут, 0 секунд
НачалоЧаса = НачалоЧаса(Дата); //3 июня 2021 года, 12 часов, 0 минут, 0 секунд
НачалоДня = НачалоДня(Дата); //3 июня 2021 года, 0 часов, 0 минут, 0 секунд
НачалоНедели = НачалоНедели(Дата); //31 мая 2021 года, 0 часов, 0 минут, 0 секунд
НачалоМесяца = НачалоМесяца(Дата); //1 июня 2021 года, 0 часов, 0 минут, 0 секунд
НачалоКвартала = НачалоКвартала(Дата); //1 апреля 2021 года, 0 часов, 0 минут, 0 секунд
НачалоГода = НачалоГода(Дата); //1 января 2021 года, 0 часов, 0 минут, 0 секунд
С помощью функций КонецМинуты, КонецЧаса, КонецДня, КонецНедели, КонецМесяца, КонецКвартала, КонецГода можно получить конец определенного периода:
Дата = Дата(2021, 6, 3, 12, 15, 6); //3 июня 2021 года, 12 часов, 15 минут, 6 секунд
КонецМинуты = КонецМинуты(Дата); //3 июня 2021 года, 12 часов, 15 минут, 59 секунд
КонецЧаса = КонецЧаса(Дата); //3 июня 2021 года, 12 часов, 59 минут, 59 секунд
КонецДня = КонецДня(Дата); //3 июня 2021 года, 23 часа, 59 минут, 59 секунд
КонецНедели = КонецНедели(Дата); //6 июня 2021 года, 23 часа, 59 минут, 59 секунд
КонецМесяца = КонецМесяца(Дата); //30 июня 2021 года, 23 часа, 59 минут, 59 секунд
КонецКвартала = КонецКвартала(Дата); //30 июня 2021 года, 23 часа, 59 минут, 59 секунд
КонецГода = КонецГода(Дата); //31 декабря 2021 года, 23 часа, 59 минут, 59 секунд
Арифметические операции с датами
К дате можно прибавлять количество секунд, можно вычесть из одной даты другую, чтобы получить разность в секундах. Чтобы к одной дате прибавить или вычесть месяц можно использовать функцию ДобавитьМесяц:
Дата = Дата(2021, 6, 3); //3 июня 2021 года
//добавить сутки
Дата = Дата + 60*60*24; //4 июня 2021 года
//добавить 2 месяца
Дата = ДобавитьМесяц(Дата, 2); //4 августа 2021 года
//вычесть 3 месяца
Дата = ДобавитьМесяц(Дата, -3); //4 мая 2021 года
Текущая дата
Функция ТекущаяДата возвращает системную дату компьютера. Может использоваться как на сервере, так и на клиенте. Причем если сервер и клиент это разные компьютеры и дата или время на них не совпадает, то данная функция вернет разные значения:
ТекущаяДата = ТекущаяДата();
Часовые пояса
1С позволяет работать в одной информационной базе из разных часовых поясов. Часовой пояс может быть определен для:
- сеанса пользователя
- информационной базы
- сервера
Если часовой пояс не задан для сеанса, то используется часовой пояс информационной базы. Если для информационной базы часовой пояс тоже не задан, то используется часовой пояс сервера.
Часовой пояс информационной базы сохраняется в базе данных, часовой пояс сеанса должен устанавливаться при начале каждого сеанса.
Для установки часового пояса сеанса используется функция УстановитьЧасовойПоясСеанса. Чтобы получить текущее значение часового пояса сеанса предназначена функция ЧасовойПоясСеанса:
УстановитьЧасовойПоясСеанса("Etc/GMT+2");
ЧасовойПоясСеанса = ЧасовойПоясСеанса(); //Etc/GMT+2
Для работы с часовым поясом информационной базы предназначены функции УстановитьЧасовойПоясИнформационнойБазы и ПолучитьЧасовойПоясИнформационнойБазы. Изменение часового пояса информационной базы возможно только в монопольном режиме. Чтобы изменение часового пояса информационной базы вступило в силу нужно перезайти в базу.
//часовой пояс ИБ можно менять только в монопольном режиме
УстановитьМонопольныйРежим(Истина);
УстановитьЧасовойПоясИнформационнойБазы("Africa/Bissau");
//если ничего не передать, то часовой пояс ИБ будет сброшен
//чтобы изменился часовой пояс сеанса нужно перезайти в базу.
УстановитьМонопольныйРежим(Ложь);
ЧасовойПоясБазы = ПолучитьЧасовойПоясИнформационнойБазы();
//если пояс не был изменен, то функция вернет Неопределено
Чтобы получить часовой пояс сервера нужно использовать функцию ЧасовойПояс:
ЧасовойПояс = ЧасовойПояс(); // "Europe/Moscow"
На сервере для получения текущей даты и времени нужно использовать функцию ТекущаяДатаСеанса. Данная функция получает дату и время с учетом часового пояса. То есть если сервер физически установлен в часовом поясе «Europe/Moscow», а подключение к нему выполняется из часового пояса «Asia/Krasnoyarsk», то функция ТекущаяДата вернет дату и время сервера, что не будет корректным. А если при старте сеанса в Красноярке установить часовой пояс «Asia/Krasnoyarsk», то функция ТекущаяДатаСеанса приведет время к часовому поясу сеанса пользователя.
ТекущаяДатаСеанса = ТекущаяДатаСеанса();
Чтобы узнать все возможные часовые пояса можно воспользоваться функцией ПолучитьДопустимыеЧасовыеПояса. Данная функция вернет массив со всеми возможными часовыми поясами:
Массив = ПолучитьДопустимыеЧасовыеПояса();
С помощью функции ПредставлениеЧасовогоПояса можно получить представление часового пояса:
Представление = ПредставлениеЧасовогоПояса("Europe/Astrakhan"); //GMT+04:00
Универсальная дата
С помощью функции ТекущаяУниверсальнаяДата можно получить дату и время UTC. С помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах можно получить количество миллисекунд, начиная с 01.01.0001 года:
ДатаUTC = ТекущаяУниверсальнаяДата(); //6 марта 2021 года 17:49:08
Миллисекунды = ТекущаяУниверсальнаяДатаВМиллисекундах();
//63 750 649 748 969
С помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах можно получить замер времени в миллисекундах:
Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
х = 0;
Для ё = 1 По 1000 Цикл
х = х + 1;
КонецЦикла;
Окончание = ТекущаяУниверсальнаяДатаВМиллисекундах();
ВремяВыполнения = Окончание - Начало; //4 миллисекунды
Также есть функции МестноеВремя и УниверсальноеВремя, которые позволяют получить местное время из универсального и универсальное время из местного:
УниверсальнаяДата = ТекущаяУниверсальнаяДата();
//получает местное время часового пояса, который указан 2-м параметром
МестноеВремя = МестноеВремя(УниверсальнаяДата, "Etc/GMT+12");
//6 марта 2021 6:02:30
//получает универсальное время из местного времени,
//часовой пояс указывается вторым параметром
УниверсальноеВремя = УниверсальноеВремя(МестноеВремя, "Etc/GMT+12");
//6 марта 2021 18:02:30
Сравнение функций
Для сравнения функций работы с часовыми поясами представим, что есть информационная база, которая физически находится в Москве. Для данной базы методом УстановитьЧасовойПоясИнформационнойБазы был установлен часовой пояс «Europe/Moscow». А также есть пользователи из Красноярска, которые тоже работают с этой информационной базой. Для них при старте системы, в модуле сеанса устанавливается часовой пояс «Asia/Krasnoyarsk» с помощью метода УстановитьЧасовойПоясСеанса. Результаты представлены в таблице, вызовы всех функций были выполнены на сервере:
ФункцияМоскваКрасноярскЧасовойПоясEurope/MoscowEurope/MoscowПолучитьЧасовойПоясИнформационнойБазыEurope/MoscowEurope/MoscowЧасовойПоясСеансаEurope/MoscowAsia/KrasnoyarskТекущаяДата06.03.2021 21:22:3706.03.2021 21:22:37ТекущаяДатаСеанса06.03.2021 21:22:3707.03.2021 1:22:46ТекущаяУниверсальнаяДата06.03.2021 18:22:3706.03.2021 18:22:37ТекущаяУниверсальнаяДатаВМиллисекундах63 750 651 757 58663 750 651 757 586
Смотрите также:
Электронный учебник по по программированию в 1С Рекомендации по изучению программирования 1С с нуля Программное решение для сдачи и подготовки к экзаменам Программирование в 1С 8.3 с нуля - краткий самоучитель Комплексная подготовка программистов 1С:Предприятие 8.2 Сайты с уроками программирования и со справочниками Youtube-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки