Centrum Skryptów - Systemy Operacyjne

W jaki sposób mogę określić, jaka jest data piątku w danym tygodniu? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

W jaki sposób mogę określić, jaka jest data piątku w danym tygodniu?

Cześć, Skrypciarzu! Czy możliwe jest napisanie skryptu obliczającego datę, na jaką przypada piątek w tygodniu, z którego datę uprzednio podano?

-- Lucjan

Cześć, Lucjanie. Szkoda, że nie zapytałeś nas o daty sobót, niedziel i świąt; tak się bowiem składa, że każdy z nas na pamięć zna wszystkie dni wolne od pracy o parę lat naprzód. Trochę gorzej jest niestety z dniami roboczymi, takimi jak piątki.

Nie szkodzi jednak: nie musimy pamiętać dat wszystkich piątków, bo od tego mamy skrypt. Oto właśnie skrypt, który – kiedy wprowadzić jakąś datę – poda datę piątku w danym tygodniu:

dtmDate = #6/23/2005#



intDay = WeekDay(dtmDate)

intAdder = 6 - intDay

dtmFriday = dtmDate + intAdder



Wscript.Echo dtmFriday

W jaki sposób można tak niesamowite efekty osiągnąć używając tak prostego skryptu? No cóż, zaraz do tego dojdziemy. Najpierw przypisujemy datę 6/23/2005 (zapisaną w formacie amerykańskim; jest to 23 czerwca 2005 r.) zmiennej o nazwie dtmDate. Zwróćmy uwagę, że znaki kratki (#) są opcjonalne; równie dobrze można datę wziąć w cudzysłów. Jeśli jednak użyjemy kratek, będziemy mieć pewność, że VBScript zinterpretuje tę wartość właśnie jako datę.

Następnie korzystamy z funkcji WeekDay do określenia, jaki dzień tygodnia przypada na 23 czerwca 2005 r. (dla ciekawych: jest to czwartek). Funkcja WeekDay zwróci jedną z poniższych wartości:

StałaWartośćOpis
vbSunday1Niedziela
vbMonday2Poniedziałek
vbTuesday3Wtorek
vbWednesday4Środa
vbThursday5Czwartek
vbFriday6Piątek
vbSaturday7Sobota

Uwaga. W powyższej tabeli – oraz w przedstawionym wcześniej skrypcie – przyjmujemy niedzielę za pierwszy dzień tygodnia.

W ten sposób uzyskujemy wartość oznaczającą dzień tygodnia; w naszym przypadku uzyskamy 5, z czego wynika, że 23 czerwca 2005 r. wypada w czwartek. Teraz musimy jeszcze programistycznie określić, ile dni upływa między tą datą a piątkiem w tym samym tygodniu. Wystarczy nam do tego jeden wiersz kodu:

intAdder = 6 - intDay

Zaskoczeni? Niepotrzebnie; zapewniamy, że wszystko tu ma sens. Jeśli spojrzymy do tabeli, zobaczymy, że piątek ma wartość równą 6. Jeśli teraz weźmiemy tę wartość i odejmiemy od niej wartość odpowiadającą czwartkowi (czyli 5), uzyskamy 1. I co teraz? Otóż teraz dodajemy 1 dzień do 23 czerwca 2005 r., uzyskując w ten sposób datę piątku w tym tygodniu: 24 czerwca 2005 r. Do tego służy nam poniższy wiersz:

dtmFriday = dtmDate + intAdder

Wiecie już, o co chodzi? Warto zauważyć, że nasze równanie działa też, jeśli podana data oznacza sobotę. Załóżmy, że sprawdzamy 25 czerwca 2005 r., czyli właśnie sobotę (o wartości WeekDay odpowiadającej 7). Nasze równanie wyglądać będzie tak:

intAdder = 6 – 7

Jak wiemy, 6 – 7 daje -1. Odejmując 1 dzień od 25 czerwca 2005 r. uzyskamy 24 czerwca 2005 r., czyli piątek. Sprytne, prawda?

Swoją drogą, z datami można zrobić wiele innych arytmetycznych sztuczek; Więcej informacji znaleźć można w rozdziale VBScript Primer (j.ang.) przewodnika Microsoft Windows 2000 Scripting Guide.

A jeśli o nas chodzi, to uważamy, że skrypt podający datę piątku, soboty czy niedzieli jest całkiem sympatyczny, ale niewystarczający. Zamierzamy więc napisać skrypt, który zamieni każdy dzień w sobotę (że sobota jest dla nas dniem wolnym, to całkowity zbieg okoliczności). Jeśli więc nagle okaże się, że nasze artykuły przestały się ukazywać, będzie to znaczyło, że się nam udało.

Jednak na razie nasze badania są w fazie początkowej i natykamy się na niespodziewane problemy; jeszcze przez jakiś czas artykuły będą się więc ukazywać.

 Do początku strony Do początku strony


Centrum Skryptów - Systemy Operacyjne