Dwa dni temu opublikowałem mała zagadkę – kod pochodzi z rozszerzenia datapicker dla Twitter Bootstrap:

bug-img

Która spowodowała całkiem niezły odzew, dzięki któremu kolejny bug został znaleziony przez nilphilus – bug uniemożliwia dla formatu yy ustawienia roku 2000 :)

Ten bug o który mi chodziło to bug w sposobie tworzenia daty, a mianowicie w kolejności ustawiania określonych wartości w datach.

Załóżmy, że mamy format daty dzień/miesiąc/rok (Irlandia), czy też miesiąc/dzień/rok (US), ogólnie jakkolwiek format daty kończący się na roku.

Co się stanie gdy podamy datę 29/02/2012?

Dostaniemy z powrotem datę 01/02/2012, dlaczego?

  • 01 – setDate działa tak, że jeżeli przekroczy się dni w miesiącu do dodają się one do daty i zmieniają miesiąc czyli po tej operacji mamy 1 marca 1970 rok.
  • 02 – setMonth następuje po setDate czyli po tej operacji mamy 1 luty 1970 rok

Rozwiązanie jest dość proste, albo należy ustawić inną datę w trakcie tworzenia daty (na przykład na rok podzielny przez 4) lub tworzyć datę z zebranych właściwości: dnia, miesiąca i roku – zamiast setDate to day = val;

1 KOMENTARZ

Comments are closed.