new Date() miesiąc liczony od 0?

0

Cześć, jest to mój pierwszy post więc bardzo serdecznie was witam :)

Uczę się programowania w javasript z http://shebang.pl/kursy/wszystko-jasne/ i mam pewną rozbieżność z kursem. Najdziwniejsze jest, że zarówno w przykładzie z kursu i przykładzie zrobionym po mojemu wszystko działa prawidłowo. Chcę zrozumieć dlaczego.

Ćwiczenie 4.6

"odeszli 27.04.2006: Black Leclère"

Data zawsze znajduje się w tym samym miejscu akapitu. Jak fajnie. Napisz funkcję o nazwie extractDate pobierającą taki akapit jako argument i wydobywającą z niego datę oraz zwracającą ją w obiekcie daty.

Odpowiedź brzmi:

function extractDate(paragraph) {
  function numberAt(start, length) {
    return Number(paragraph.slice(start, start + length));
  }
  return new Date(numberAt(14, 4), numberAt(11, 2) - 1,
                  numberAt(8, 2));
}

show(extractDate("odeszli 27-04-2006: Black Leclère"));

Zanim ją zobaczyłem rozwiązałem zadanie po swojemu:

function extractDate(akapit) {
	return new Date(akapit.slice(8,18).split(".").reverse());
}

show(extractDate("odeszli 27.04.2006: Black Leclère"));

Działa? Działa. Po wszystkim przeczytałem, że oczywiście zapomniałem iż funkcja Date() liczy miesiące od 0, a nie 1. No, ale sprawdzam i mój kod działa prawidłowo. Dlaczego?

0

W konstruktorze z argumentem będącym ciągiem znaków przyjmuje datę licząc miesiące od jedynki, ale zobacz już sobie rezultat tego:

console.log(extractDate("odeszli 27.12.2006: Black Leclère").getMonth());
0

Że wyskoczy miesiąc-1 to wiedziałem, tylko nie wiedziałem czemu do data dobrze przekazało.

W konstruktorze z argumentem będącym ciągiem znaków przyjmuje datę licząc miesiące od jedynki

jeszcze się pobawiłem tak:

 a = 2016;
  b = 4;
  c = 27;
  d = new Array(2016,4,27);
  print(new Date(a,b,c))
  print(new Date(d));

i teraz już rozumiem jak to działa. Choć dziwi mnie ten brak konsekwencji. W każdym razie cieszę się, że tak szybko na to trafiłem.

0

Choć dziwi mnie ten brak konsekwencji.
A to, że dni są liczone od jedynki już Cię nie dziwi? ;-)
Poza tym mówimy o języku, w którym co roku zmieniają zasady odnośnie konieczności stawiania średników.

0

Co za genjusz po kilku tysiącach lat nagle stwierdził, że liczenie miesięcy od zera to będzie dobry pomysł? ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1