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

Применимо к: приложениям на основе холста столбцам формул Dataverse классическим потокам приложениям на основе модели интерфейсу командной строки Power Platform

Добавление значения даты и времени или поиск разницы в значениях даты и времени, а также преобразование между местным временем и временем в формате 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, Addition [, Units ] )

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

DateDiff( StartDateTime, EndDateTime [, Units ] )

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

TimeZoneOffset( [ DateTime ] )

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

Примеры

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

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

Формула Описание Результат
Text( DateAdd( Now(), 3 ),
"dd-mm-yyyy hh:mm" )
Добавляет три дня (единицы измерения по умолчанию) к текущему значению даты и времени. "18-07-2013 13:02"
Text( DateAdd( Now(), 4, TimeUnit.Hours ),
"dd-mm-yyyy hh:mm" )
Добавляет четыре часа к текущему значению даты и времени. "15-07-2013 17:02"
Text( DateAdd( Today(), 1, TimeUnit.Months ),
"dd-mm-yyyy hh:mm" )
Добавляет один месяц к текущему значению даты без указания времени, так как Today не возвращает составляющую времени. "15-08-2013 00:00"
Text( DateAdd( Now(), ‑30, TimeUnit.Minutes ),
"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(), TimeUnit.Minutes ) Возвращает разницу между текущим значением даты и времени и текущей датой (без указания времени) в минутах. Так как значение 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( StartTime, −TimeZoneOffset( StartTime ), TimeUnit.Minutes )

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

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