Jestliže byl předchozí článek věnován teorii, bude dnešní lekce zaměřena ryze prakticky. Budeme se zabývat funkcemi, které zpracovávají datum a čas.
Snad nejdůležitější je funkce na zjištění aktuálního času a datumu.
Now – aktuální čas a datum
Now ()
Funkce vrátí aktuální datum a čas v jedné proměnné. Pokud jinak neurčíme formát, výsledkem funkce je řetězec
dd.mm.yyyy hh:mm:ss
. Pokud však budeme chtít s těmito údaji dále pracovat, měli bychom si z tohoto řetězce extrahovat. Můžeme použít již nám známé funkce pro práci s řetězci (např.
Mid
), ale VBS nabízí mnohem elegantnější řešení.
Day (datum)
Month (datum)
Year (datum)
Hour (datum)
Minute (datum)
Second (datum)
Uvedené funkce vrací jednotlivé časové, resp. datumové jednotky (den, měsíc, rok, hodina, minuta, sekunda). K těmto šesti funkcím můžeme přiřadit také sedmou na zjištění dne v týdnu - WeekDay
WeekDay (datum, [prvni_den_v_tydnu])
Funkce vrací číslo od 1 do 7, přičemž 1 reprezentuje neděli, 2 podělí a 7 sobotu. Vychází to amerického systému, kdy se za začátek týdne považuje neděle. Pro tuto odlišnost nabízí VBS pro mezinárodní použití druhý parametr, který určuje první den v týdnu. Pokud jej neuvedeme nebo uvedeme 0, použije se výchozí nastavení systému – NLS (National Language Support). Při použití druhého parametru jako 1 nadefinujeme jako první den týdnu neděli, 2 pondělí – tedy analogie prvního parametru.
Pozn: Namísto čísel 1..7 můžeme použít také konstanty tedy vbSunday, vbMonday, vbTuesday, vbWednesday, vbThursday, vbFriday, vbSaturday . Uvedené funkce bychom si tedy mohli názorně předvést na malém příkladě:
<%
Function GetDay(d)
Select Case WeekDay(d)
Case 1 GetDay = "nedìle"
Case 2 GetDay = "pondìlí"
Case 3 GetDay = "úterý"
Case 4 GetDay = "støeda"
Case 5 GetDay = "ètvrtek"
Case 6 GetDay = "pátek"
Case 7 GetDay = "sobota"
End Select
End function
Dim Actual
Actual = Now
response.write("<table>")
response.write("<tr><td><b>Dnešní datum:</b></td><td> " & Day(Actual) & "." & Month(Actual) & "." & Year(Actual) & "</td></tr>")
response.write("<tr><td><b>Aktuální èas:</b></td><td> " & Hour(Actual) & ":" & Minute(Actual) & ":" & Second(Actual) & "</td></tr>")
response.write("<tr><td><b>Den:</b></td><td> " & GetDay(Actual) & "</td></tr>")
response.write("</table>")
%>
DateSerial a TimeSerial – sestavení formátu Date/Time
DateSerial (rok, měsíc, den)
TimeSerial (hodina, minuta, sekunda)
Funkce vrátí typ Variant podtypu Date, resp. Time. Přeloženo do normálního jazyka, sestaví datum do formátu, s kterým můžeme dále pracovat jako datum/čas. Pozorný čtenář se jistě zamyslí, proč nesestavíme datum pouhým sloučením, např.
den & "." & měsic & "." & rok
. Toto řešení nám však neohlídá problémy s platností data, zatímco DateSerial před sestavením vždy provede kontrolu a případně datum upraví. Pokud tedy zavoláme funkci
DateSerial (2001, 2, 30) ‘ nevrátí nám 30.2.2001, nýbrž 2.3.2001
Navíc nám tato funkce dovoluje řešit pohyby po kalendáři (dnes si uvedeme ještě jednu funkci, která je určena právě pro toto použití). Pokud chceme vrátit datum, kolikátého bude za 100 dní, můžeme použít: DateSerial( Year(Now), Month(Now), Day(Now)+100 )
DateValue – převod do formátu Date/Time
DateValue (datum)
TimeValue (čas)
Funkce převádí datum do formátu Date, resp. čas do formátu Time. Důležité je však říci, z jakého formátu se převod převádí:
DateValue("11. Leden 1999")
DateValue("11.leden 1999")
DateValue("11 leden 1999")
DateValue("11-leden-1999")
DateValue("11-led-1999")
DateValue("11.1.1999")
DateValue("11 1 1999")
DateValue("11/1/1999")
Všechny uvedené příklady vrátí datum 11.1.1999, neboli #1/11/1999#. Pozor však nezaměňujme tento zápis s posledním z příkladů. Z třetího dílu víme, že se datum uvozuje do maltézských křížů. Musím však dát pozor na správný US formát, tedy #mm/dd/yyyy#. Podobně je tomu u funkce TimeValue: TimeValue("3:28:15 PM")
TimeValue("3:28:15 pm")
TimeValue("15:28:15")
Tyto funkce vrátí 15:28:15. Analogicky můžeme použít také AM.
Ostatní funkce pro práci s datumem a časem
DateAdd (jednotka, počet_jednotek, výchozí_datum)
Funkce
DateAdd
provádí časový posun o danou jednotku, na rozdíl od
DateSerial
, může provádět posun i o hodiny, minuty, sekundy, kvartály, týdny, čísla dnů a týdnů. Časovou jednotku definujeme prvním parametrem a může nabývat:
Jednotka |
Popis |
yyyy |
Rok |
q |
čtvrtletí |
m |
Měsíc |
y |
den v roce |
d |
den |
w |
pracovní den |
ww |
pracovní týden |
h |
hodina |
n |
minuta |
s |
Sekunda |
Malý příklad:
DateAdd("m", 1, "31.leden 2001") ‘ funkce vrátí 28.2.2001
DateDiff (jednotka, datum1, datum2)
Funkce DateDiff
porovnává dvě data na úrovni definované jednotky. Funkce má složitější deklaraci, ale podrobnější syntaxe přesahuje rámec tohoto seriálu. Uvedeme si snad, že se jedná o analogii posledního parametru ve funkci WeekDay
. Jednotky již známe z funkce DateAdd
. Funkce vrací samozřejmě také záporné hodnoty, pokud je datum1
větší než datum2.
Příklad na tuto funkci si uvedeme v příští lekci.