Priama manipulácia s dátumom a časom
Doteraz, ak sme chceli čas resp. dátum, tak sme vytvorili nový napr. s pomocou funkcie TimeSerial()
alebo DateSerial()
. Existuje však spôsob, ktorý vám umožní zmeniť len časť času a dátumu bez toho, aby
ste museli vytvárať celý dátum resp. čas. Tento spôsob vám ušetrí čas pri zápise a rovnako sa už nemusíte veľmi
starať, čo všetko ste zmenili v dátumovej či časovej informácii. Funkcia DateAdd()
dokáže na
základe zvoleného intervalu pridať alebo odobrať hodnotu zvoleného identifikátora času alebo dátumu. Identifikátorom
času resp. dátumu rozumieme napr. minúty, hodiny či dni v týždní. Návratová hodnota funkcie
DateAdd()
je premenná typu Variant
, ktorá predstavuje zmenený dátum resp. čas.
Nasleduje ukážka programu, kde budeme pridávať časový interval.
Sub zmenaCasu Dim cas As Variant Dim novy_cas1 As Variant Dim novy_cas2 As Variant Dim novy_cas3 As Variant cas = "10:11:57" novy_cas1 = DateAdd("h", 5, cas) novy_cas2 = DateAdd("n",4,cas) novy_cas3 = DateAdd("s",3,novy_cas2) MsgBox "Prvý čas: " & novy_cas1 & Chr(10) & "Druhý čas: " & novy_cas2 & Chr(10) & "Tretí čas: " & novy_cas3 End Sub
Ak vieme pridať interval do nejakej častí času, vieme ho i odobrať. Neveríte? Presvedčme sa!
Sub zmenaCasu Dim cas As Variant Dim novy_cas1 As Variant Dim novy_cas2 As Variant Dim novy_cas3 As Variant cas = "10:11:57" novy_cas1 = DateAdd("h", -3, cas) novy_cas2 = DateAdd("n",-11,cas) novy_cas3 = DateAdd("s",-8,novy_cas2) MsgBox "Prvý čas: " & novy_cas1 & Chr(10) & "Druhý čas: " & novy_cas2 & Chr(10) & "Tretí čas: " & novy_cas3 End Sub
Funkcia DateAdd()
je tvorená troma argumentmi. Prvým argumentom povieme, ktorú časť časovej informácie
chceme zmeniť, druhý argument reprezentuje interval, o koľko zmeníme časový údaj a tretím argumentom nie je nič iné,
než samotný čas, ktorý chceme zmeniť.
V prvom argumente máme pri čase možnosť zmeniť hodiny cez reťazec "h"
, minúty ako "n"
a sekundy "s"
.
Podobne budeme postupovať aj pri dátume.
Sub zmenaDatumu Dim datum As Variant Dim novy_cas1,novy_cas2,novy_cas3,novy_cas4,novy_cas5,novy_cas6,novy_cas7 As Variant datum = "26.02.2007" novy_datum1 = DateAdd("d", 2, datum) novy_datum2 = DateAdd("yyyy",-3,novy_datum1) novy_datum3 = DateAdd("m",-5,novy_datum2) novy_datum4 = DateAdd("q",2,novy_datum3) novy_datum5 = DateAdd("w",5,novy_datum4) novy_datum6 = DateAdd("ww",2,novy_datum5) novy_datum7 = DateAdd("y",-3,novy_datum6) MsgBox "Prvý datum: " & novy_datum1 & Chr(10) & "Druhy datum: " & novy_datum2 & Chr(10) & "Treti datum: " & novy_datum3 & Chr(10) & "Stvrty datum: " & novy_datum4 & Chr(10) & "Piaty datum: " & novy_datum5 & Chr(10) & "Siesty datum: " & novy_datum6 & Chr(10) & "Siedmy datum: " & novy_datum7 End Sub
Poďme si rozobrať hlavne prvý argument, ktorým definujeme, čo chceme zmeniť v dátumovej informácii. Takže
"d"
definujeme deň, "m"
mesiac, "yyyy"
rok, "q"
štvrťrok,
"w"
deň v týždní, "ww"
týždeň v roku a "y"
predstavuje deň
v roku, ale funguje ako argument v tvare "d"
. Dávajte si pozor na rozdiel medzi
"w"
a "ww"
, pri prvom je interval 1-7 a druhý má interval 1-52 resp. 1-53! Nemal by ale byť
problém prekročiť hodnoty intervalu, napr. ak dáte hodnotu 8 pri "w"
, tak sa to berie ako 7+1. Malo by
byť jasné, z akého dôvodu. Ak by nebolo niečo jasné, vždy je možnosť sa spýtať pod článkom v komentári.
Ako zistiť časový rozdiel medzi dvoma odlišnými časmi?
Na zistenie časového intervalu medzi dvoma časmi použijeme funkciu DateDiff()
. Funkcia vracia celé
číslo.
Sub zistenieIntervaluCasu Dim datum1 As Variant Dim datum2 As Variant Dim datum3 As Variant Dim datum4 As Variant Dim vysledok1 As Integer Dim vysledok2 As Integer datum1 = "15.06.2015" datum2 = "19.02.2017" datum3 = "28.11.2014" datum4 = "11.11.2011" vysledok1 = DateDiff("d",datum1,datum2) vysledok2 = DateDiff("m",datum3,datum4) MsgBox "Prvy rozdiel: " & vysledok1 & Chr(10) & "Druhy rozdiel: " & vysledok2 End Sub
Všimnite si, že môžeme dostať kladné i záporne číslo podľa toho, ako dátumy dáme do argumentov.