Функции DateAdd, DateDiff и TimeZoneOffset

Function Относится к
ДатаДобавить Приложения Canvas Dataverse Столбцы формул Потоки рабочего стола Приложения на основе моделей Power Platform CLI
ДатаРазница Приложения Canvas Dataverse Столбцы формул Потоки рабочего стола Приложения на основе моделей Power Platform CLI
Смещение часового пояса Приложения Canvas Потоки рабочего стола Приложения на основе моделей Power Platform CLI

Добавление значения даты и времени или поиск разницы в значениях даты и времени, а также преобразование между местным временем и временем в формате UTC.

Описание

Функция DateAdd добавляет указанное число единиц измерения к значению даты и времени. Результатом является новое значение даты и времени. Можно также вычесть число единиц измерения из значения даты и времени, указав отрицательное значение.

Функция DateDiff возвращает разницу между двумя значениями даты и времени. Результатом является целое число единиц измерения.

Для обеих функций единицами измерения могут быть TimeUnit.Milliseconds, TimeUnit.Seconds, TimeUnit.Minutes, TimeUnit.Hours, TimeUnit.Days, TimeUnit.Months, TimeUnit.Quarters, или TimeUnit.Years. По умолчанию обе функции в качестве единиц используют TimeUnit.Days.

Функция TimeZoneOffset возвращает число минут между местным временем пользователя и временем в формате UTC.

Можно совмещать функции DateAdd и TimeZoneOffset, чтобы выполнять преобразование между местным временем пользователя и временем в формате UTC. Добавляя результат TimeZoneOffset, можно преобразовать местное время в формат UTC, а вычитая его (добавляя отрицательное значение), можно преобразовать время в формате UTC в местное время.

Также см. сведения о типах данных Date, Time и DateTime и о работе с датами и временем.

Синтаксис

DateAdd( ДатаВремя, Сложение [, Единицы ] )

  • Дата и время - Обязательно. Значение даты и времени, для которого необходимо выполнить операцию.
  • Дополнение - Обязательно. Число, добавляемое к значению DateTime, в единицах Units.
  • Единицы измерения - Необязательно. Тип единиц для добавления: TimeUnit.Milliseconds, TimeUnit.Seconds, TimeUnit.Minutes, TimeUnit.Hours, TimeUnit.Days, TimeUnit.Months, TimeUnit.Quarters, или TimeUnit.Years. Если значение не указано, используются единицы TimeUnit.Days.

DateDiff( StartDateTime, EndDateTime [, Единицы измерения ] )

  • StartDateTime — обязательно. Начальное значение даты и времени.
  • EndDateTime - Обязательно. Конечное значение даты и времени.
  • Единицы измерения - Необязательно. Тип Единицы для вычитания: TimeUnit.Milliseconds, TimeUnit.Seconds, TimeUnit.Minutes, TimeUnit.Hours, TimeUnit.Days, TimeUnit.Months, TimeUnit.Quarters, or TimeUnit.Years. Если значение не указано, используются единицы TimeUnit.Days.

СмещениеЧасовогоПояса( [ ДатаВремя ] )

  • Дата и время - Необязательно. Значение даты и времени, для которого возвращается смещение. По умолчанию используются текущие дата и время.

Примеры

Во всех примерах предполагается, что текущие дата и время — 13:02 15 июля 2013 года.

Простой пример для функции DateAdd

Формула Описание Результат
Текст( ДатаДобавить( Сейчас(), 3 ),
"dd-mm-yyyy hh:mm" )
Добавляет три дня (единицы измерения по умолчанию) к текущему значению даты и времени. "18-07-2013 13:02"
Текст( ДатаДобавить( Сейчас(), 4, ЕдиницаВремени.Часы ),
"dd-mm-yyyy hh:mm" )
Добавляет четыре часа к текущему значению даты и времени. "15-07-2013 17:02"
Текст( ДатаДобавить( Сегодня(), 1, ЕдиницаВремени.Месяцы ),
"dd-mm-yyyy hh:mm" )
Добавляет один месяц к текущему значению даты без указания времени, так как Today не возвращает составляющую времени. "15-08-2013 00:00"
Текст( ДатаДобавить( Сейчас(), ‑30, ЕдиницаВремени.Минуты ),
"dd-mm-yyyy hh:mm" )
Вычитает 30 минут из текущего значения даты и времени. "15-07-2013 12:32"

Простой пример для функции DateDiff

Формула Описание Результат
DateDiff( Now(), DateValue("1/1/2014") ) Возвращает разницу между двумя единицами измерения по умолчанию TimeUnit.Days. 170
DateDiff( Now(), DateValue("1/1/2014"), TimeUnit.Months) Возвращает разницу между двумя значениями в TimeUnit.Months. 6
DateDiff(Сейчас(), Сегодня(), Единица времени.Минуты) Возвращает разницу между текущим значением даты и времени и текущей датой (без указания времени) в минутах. Так как значение Now следует после значения Today, то результат будет отрицательным. -782

Разница дат с дробными результатами

Функция DateDiff возвращает только целое число вычитаемых единиц, а точность задается в указанных единицах. Чтобы вычислить разницу с более высокой точностью, используйте меньшие единицы и соответствующим образом преобразуйте результат, как в примерах ниже.

Формула Описание Результат
DateDiff( TimeValue("09:45:00"), TimeValue("10:15:36"), TimeUnit.Hours) Минуты/секунды игнорируются, разница основана на времени с точностью до часа. 1
DateDiff( TimeValue("09:45:00"), TimeValue("10:15:36"), TimeUnit.Minutes)/60 Минуты используются для разницы, а результат делится на 60, чтобы получить разницу в часах. 0.5
DateDiff( TimeValue("09:45:00"), TimeValue("10:15:36"), TimeUnit.Seconds)/3600 Минуты и секунды используются для разницы, а результат делится на 3600, чтобы получить разницу в часах. 0.51

Преобразование в формат UTC

Чтобы выполнить преобразование в формат UTC, добавьте значение TimeZoneOffset для заданного времени.

Например, представьте, что сейчас 13:02 15 июля 2013 года по летнему тихоокеанскому времени США (UTC-7). Чтобы определить текущее время в формате UTC, используйте следующую команду:

  • DateAdd( Now(), TimeZoneOffset(), TimeUnit.Minutes )

TimeZoneOffset по умолчанию соответствует текущему времени, поэтому вам не нужно передавать ему аргумент.

Чтобы увидеть результат, используйте функцию Text в формате dd-mm-yyyy hh:mm. Она вернет 15-07-2013 20:02.

Преобразование из формата UTC

Чтобы преобразовать время из формата UTC в местное время, следует вычесть значение TimeZoneOffset (то есть добавить отрицательное значение) из заданного времени.

Для примера предположим, что значение даты и времени в формате UTC, 20:02 15 июля 2013 года, хранится в переменной StartTime. Чтобы настроить время в соответствии с текущим часовым поясом пользователя, используйте следующую команду:

  • DateAdd(ВремяНачала, −TimeZoneOffset(ВремяНачала), ЕдиницаВремени.Минуты)

Обратите внимание, на знак минус перед TimeZoneOffset, который позволяет вычесть смещение, а не добавить его.

Чтобы увидеть результат, используйте функцию Text в формате dd-mm-yyyy hh:mm. Она вернет 15-07-2013 13:02, если вы находитесь в часовом поясе тихоокеанского времени США (лето).