Funkcje DateAdd, DateDiff i TimeZoneOffset

Dotyczy: Aplikacje oparte na kanwie Kolumny frmuł Dataverse Przepływy pulpitu Aplikacje oparte na modelach Power Platform CLI

Funkcje te służą do dodawania różnicy do wartości daty/godziny, odnajdywania takiej różnicy i wykonywania konwersji między czasem lokalnym i czasem UTC.

Opis

Funkcja DateAdd służy do dodawania liczby jednostek do wartości daty/godziny. Wynik to nowa wartość daty/godziny. Możliwe jest również odjęcie liczby jednostek od wartości daty/godziny, określając wartość ujemną.

Funkcja DateDiff zwraca różnicę między dwiema wartościami daty/godziny. Wynik to liczba całkowita jednostek.

W przypadku obu funkcji jednostkami mogą być TimeUnit.Milliseconds, TimeUnit.Seconds, TimeUnit.Minutes, TimeUnit.Hours, TimeUnit.Days, TimeUnit.Months, TimeUnit.Quarters lub TimeUnit.Years. Domyślna jednostka używana przez obie funkcje to TimeUnit.Days jako jednostki.

Funkcja TimeZoneOffset zwraca liczbę minut między czasem lokalnym i czasem UTC użytkownika.

Możliwe jest użycie funkcji DateAdd wraz z funkcją TimeZoneOffset w celu wykonania konwersji między czasem lokalnym, a czasem UTC użytkownika. Dodanie wartości funkcji TimeZoneOffset spowoduje wykonanie konwersji czasu lokalnego na czas UTC, a odjęcie go (dodanie wartości ujemnej) spowoduje wykonanie konwersji czasu UTC na czas lokalny.

Zobacz też Typy danych Date, Time i DateTime oraz Praca z datami i godzinami, aby uzyskać więcej informacji.

Składnia

DateAdd( DateTime, IlośćJednostekDoDodania [, Jednostki ] )

  • DateTime – wymagane. Wartość daty/godziny używana w ramach operacji.
  • Addition – wymagane. Liczba Jednostek do dodania do wartości DateTime.
  • Units – opcjonalne. Typ Jednostki do dodania: TimeUnit.Milliseconds, TimeUnit.Seconds, TimeUnit.Minutes, TimeUnit.Hours, TimeUnit.Days, TimeUnit.Months, TimeUnit.Quarters lub TimeUnit.Years. Jeśli typ nie zostanie określony, jako jednostka używana jest wartość TimeUnit.Days.

DateDiff( StartDateTime, EndDateTime [, Jednostki ] )

  • StartDateTime – wymagane. Początkowa wartość daty/godziny.
  • EndDateTime – wymagane. Końcowa wartość daty/godziny.
  • Units – opcjonalne. Typ Jednostki do odjęcia: TimeUnit.Milliseconds, TimeUnit.Seconds, TimeUnit.Minutes, TimeUnit.Hours, TimeUnit.Days, TimeUnit.Months, TimeUnit.Quarters lub TimeUnit.Years. Jeśli typ nie zostanie określony, jako jednostka używana jest wartość TimeUnit.Days.

TimeZoneOffset( [ DateTime ] )

  • DateTime – opcjonalne. Wartość daty/godziny, dla której ma zostać zwrócone przesunięcie. Domyślnie używana jest bieżąca wartość daty/godziny.

Przykłady

We wszystkich poniższych przykładach założono, że bieżąca data i godzina to 15 lipca 2013 r., 13:02:00.

Proste wywołanie funkcji DateAdd

Wzór Opis Wynik
Text( DateAdd( Now(), 3 ),
"dd-mm-yyyy hh:mm" )
Dodaje trzy dni (jednostki domyślne) do bieżącej daty i godziny. "18-07-2013 13:02"
Text( DateAdd( Now(), 4, TimeUnit.Hours ),
"dd-mm-yyyy hh:mm" )
Dodaj cztery godziny do bieżącej daty i godziny. "15-07-2013 17:02"
Text( DateAdd( Today(), 1, TimeUnit.Months ),
"dd-mm-yyyy hh:mm" )
Dodaje miesiąc do bieżącej daty bez godziny, ponieważ funkcja Today nie zwraca składnika godziny. "15-08-2013 00:00"
Text( DateAdd( Now(), ‑30, TimeUnit.Minutes ),
"dd-mm-yyyy hh:mm" )
Odejmuje 30 minut od bieżącej daty i godziny. "15-07-2013 12:32"

Proste wywołanie funkcji DateDiff

Wzór Opis Wynik
DateDiff( Now(), DateValue("1/1/2014") ) Zwraca różnicę między dwiema jednostkami w domyślnych jednostkach – TimeUnit.Days 170
DateDiff( Now(), DateValue("1/1/2014"), TimeUnit.Months ) Zwraca różnicę między dwiema wartościami w jednostkach TimeUnit.Months 6
DateDiff( Now(), Today(), TimeUnit.Minutes ) Zwraca różnicę między bieżącą datą/godziną i bieżącą datą (bez godziny) w minutach. Ponieważ wartość zwracana przez funkcję Now jest późniejsza niż wartość zwracana przez funkcję Today, wynik będzie ujemny. -782

Różnica dat z wynikami ułamkowymi

Funkcja DateDiff zwraca tylko liczbę całkowitą odejmowanych jednostek, a dokładność jest podana w określonej jednostce. Aby obliczyć różnicę z większą precyzją, należy użyć mniejszej jednostki i odpowiednio przekonwertować wynik, jak w poniższych przykładach.

Formuła Opis Wynik
DateDiff( TimeValue("09:45:00"), TimeValue("10:15:36"), TimeUnit.Hours ) Minuty/sekundy są ignorowane, a różnica jest oparta na czasie zaokrąglonym w górę do godziny. 1
DateDiff( TimeValue("09:45:00"), TimeValue("10:15:36"), TimeUnit.Minutes )/60 Minuty są używane w różnicy, a wynik jest dzielony przez 60, aby uzyskać różnicę w godzinach. 0.5
DateDiff( TimeValue("09:45:00"), TimeValue("10:15:36"), TimeUnit.Seconds )/3600 Minuty i sekundy są używane w różnicy, a wynik jest dzielony przez 3600, aby uzyskać różnicę w godzinach. 0.51

Wykonywanie konwersji na czas UTC

Aby wykonać konwersję na czas UTC, dodaj wartość zwracaną przez funkcję TimeZoneOffset dla danej godziny.

Na potrzeby przykładu załóżmy, że aktualna data i godzina to 15 lipca 2013 r., 13:02:00 czasu pacyficznego (PDT, UTC-7). Aby określić bieżącą godzinę w formacie UTC, użyj następującej funkcji:

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

Domyślnie wartość zwracana przez funkcję TimeZoneOffset to bieżąca godzina, więc nie ma potrzeby przekazywać do niej argumentu.

Aby wyświetlić wynik, użyj funkcji Text w formacie dd-mm-yyyy hh:mm, co spowoduje zwrócenie wartości 15-07-2013 20:02.

Wykonywanie konwersji z czasu UTC

Aby wykonać konwersję z czasu UTC, odejmij wartość zwracaną przez funkcję TimeZoneOffset (dodając wartość ujemną) dla danej godziny.

Na potrzeby przykładu załóżmy, że data i godzina w formacie UTC, 15 lipca 2013 r., 20:02:00, jest przechowywana w zmiennej o nazwie GodzinaPoczatkowa. Aby dostosować godzinę dla strefy czasowej użytkownika, wywołaj funkcję w następujący sposób:

  • DateAdd( StartTime, −TimeZoneOffset( StartTime ), TimeUnit.Minutes )

Należy pamiętać, aby dodać znak minus przed wywołaniem funkcji TimeZoneOffset w celu odjęcia przesunięcia, a nie dodania go.

Aby wyświetlić wynik, użyj funkcji Text w formacie dd-mm-yyyy hh:mm, co spowoduje zwrócenie wartości 15-07-2013 13:02 czasu pacyficznego.