Bug #038
🪲 Znajdź buga
const now = new Date()
const months = new Map([
[1, "January"],
[2, "February"],
[3, "March"],
[4, "April"],
[5, "May"],
[6, "June"],
[7, "July"],
[8, "August"],
[9, "September"],
[10, "October"],
[11, "November"],
[12, "December"],
])
const weekdays = new Map([
[1, "Monday"],
[2, "Tuesday"],
[3, "Wednesday"],
[4, "Thursday"],
[5, "Friday"],
[6, "Saturday"],
[7, "Sunday"],
])
console.log(now.toISOString())
console.log(now.getDate())
console.log(months.get(now.getMonth()))
console.log(weekdays.get(now.getDay()))
Czy powyższy kod zaloguje do konsoli poprawny dzień miesiąca, nazwę miesiąca i nazwę dnia tygodnia?
🧪 Rozwiązanie
const now = new Date()
const months = new Map([
[1, "January"],
[2, "February"],
[3, "March"],
[4, "April"],
[5, "May"],
[6, "June"],
[7, "July"],
[8, "August"],
[9, "September"],
[10, "October"],
[11, "November"],
[12, "December"],
])
const weekdays = new Map([
[0, "Sunday"],
[1, "Monday"],
[2, "Tuesday"],
[3, "Wednesday"],
[4, "Thursday"],
[5, "Friday"],
[6, "Saturday"],
])
console.log(now.toISOString())
console.log(now.getDate())
console.log(months.get(now.getMonth() + 1))
console.log(weekdays.get(now.getDay()))
W przykładzie z błędem, poprawność działania kodu częściowo zależy od dnia, w którym zostanie uruchomiony.
new Date()
generuje aktualną datę w lokalnej strefie czasowej.
Polska leży w strefie czasowej +1h (czas zimowy) lub +2h (czas letni) w stosunku do strefy UTC.
Metoda toISOString()
zwraca datę w formacie UTC. Jeśli więc kod zostanie uruchomiony np. o godz. 00:30 w polskiej stefie czasowej, to toISOString()
zwróci w odpowiedzi datę z dnia poprzedniego polskiej strefy czasowej.
Pozostałe metody występują w dwóch wariantach.
Pierwsze, bez UTC w nazwie metody, zwracają datę czasu lokalnego (tego, w którym został uruchomiony kod). Drugie, z UTC w nazwie metody, zwracają datę ze strefy czasowej UTC.
Przykładowo, wariant getDate()
zwróci dzień miesiąca czasu lokalnego, a wariant getUTCDate()
dzień miesiąca czasu UTC.
Metoda getDate()
nie sprawia niespodzianek, zwracając dzień miesiąca w formie liczbowej (w przedziale od 1
do 31
).
Metoda getMonth()
jest już nieco mniej intuicyjna. Zwraca bowiem numer miesiąca, ale numeracja miesięcy zaczyna się od 0
.
Styczeń to 0
, grudzień to 11
.
Jeśli chcemy przypisać nazwy miesięcy do wartości z zakresu od 1
do 12
, to wywołując getMonth()
musimy pamiętać, aby zawsze dodawać do zwracanej wartości +1
.
Metoda getDay()
zwraca numer dnia tygodnia w zakresie liczbowym od 0
do 6
. Dodatkowo musimy jednak pamiętać, że numerowanie dni tygodnia zaczyna się od niedzieli (0
), a kończy na sobocie (6
).
🎢 Plac zabaw
Otwórz edytor w nowym oknie📑 Linki
- Date.prototype.getDate() - JavaScript | MDN
- Date.prototype.getMonth() - JavaScript | MDN
- Date.prototype.getDay() - JavaScript | MDN
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js