Dwa dni temu opublikowałem mała zagadkę – kod pochodzi z rozszerzenia datapicker dla Twitter Bootstrap:
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;
czuję się taki doceniony ^.^
a ten ‘docelowy’ błąd to całkiem sprytny jest.
Comments are closed.