Jest sobota wieczór i po kilku drinkach nie do końca odpowiadam za swoje odpowiedzi; ale obstawiam
val = parseInt(…) || 1;
Brak default w switchu :P
nie :)
nie, to nie bug, moze byc niedopatrzenie, ale tez nie wiem co by autor mial na mysli gdyby mial tam default
Jakims specem od JS nie jestem, ale może ma to coś wspolnego z tym w jaki sposob i w jakiej kolejnosci przetwarzane są deklaracje/inicjalizacje.
Moze date = new Date(…) wykonane zostanie zanim wykonamy date.split() w zwiazku z czym zawsze bedziemy splitowac defaultowa date z 1970..?
date.setDate, nie powinno być .setDay?
A może ten setMonth(val – 1)?
W sumie to jest troche błędów w logice:
– brak deklaracji cnt; niby to js, ale resztę deklarujesz
– potem pętla z cnt = format.parts.length – też trochę dziwne; że po prostu nie ma: i < format.parts.length
– no i ostatnia rzecz; to niby if wymusza identycznosc tablic; ale parseInt robisz z parts a switcha na format.parts
Ale to zasadniczo wszystko składnia i dobre obyczaje a nie błędy :P
kod nie jest moj – musialem buga naprawic bo na niego natrafilem, ogolnie jest to kontrolka robiaca datapicker z twitter bootstraper – http://www.eyecon.ro/bootstrap-datepicker/
– deklaracja cnt jest: var i = 0, cnt = length; to tak jakbys zapisal: var i = 0; var cnt = length; jest to niby w for, ale zostanie to przez kompilator js przezucone do czesci var parts;
– to jest micro optimalization. kazda kropka w js (cos.wartosc) wymaga przegladania scope, zas length moze byc za kazdym razem przeliczany, dlatego w JS zaleca sie przypisywanie length do zmiennej;
– tak, ale tutaj format jest wporzadku. w sensie dozwolone ustawienie formatu to d|dd, m|mm| oraz yy|yyyy, separator tez jest okreslony -|/. to ogolnie dziala dla pewnego setu danych, oczywiscie nie dostaniemy daty poprawnej jezeli nie podamy wszystkich parametrow poprawnie. jednak my do tej funkcji zewnatrz nie mamy dostepu i jest ona tylko wykorzystywana internal
blisko, ale nie dokladnie to. kolejnosc przy deklarowaniu zmiennych jest taka jaka jest zapisana, to znaczy najpierw zostanie wykonany split a potem new Date.
No to ostatnia próba, bo kończą mi się pomysły. Ale pamiętam że kiedyś z tym walczyłem i new Date() wymaga 7 parametrów a nie 6; ostatni to chyba milisekundy.
hmm… zakładanie że jest 2000+ rok jest raczej błędem, ale chyba nie o to chodzi?
podobnie month – 1?
hmm.. czy w JS operator przecinka dziala podobnie jak w C? wtedy parts = val, ktore no nie ma wartosci.
zastanawia mnie jeszcze val = parseInt ktory dla roku 2000 (podanego jako 00) moze zwrocic 2001?
month – 1 nie jest bleden, setMonth przyjmuje wartosci o 0 do 11, stad tez ten -1.
w tym wypadku val jest undefined – var x = 10, y, z = 5; alert(y === undefined)
prawda, parseInt dla formatu roku yy i wartosci 00 zwroci 1 jako ze tak dziala js i jest to bug w kodzie, jezeli Jakub tez o tym myslal to przyznaje i mu racje. umknal mi on :) chyle czolo :)
jednak jest bardziej wyrafinowany bug w tym wszystkim dla dat z yyyy (pelnym rokiem)
tak ogolnie: ktos w ogole korzysta z roku w formie yy ?
:) nie, nie ma z tym problemu, wartosci sa domysle wtedy
Jest sobota wieczór i po kilku drinkach nie do końca odpowiadam za swoje odpowiedzi; ale obstawiam
val = parseInt(…) || 1;
Brak default w switchu :P
nie :)
nie, to nie bug, moze byc niedopatrzenie, ale tez nie wiem co by autor mial na mysli gdyby mial tam default
Jakims specem od JS nie jestem, ale może ma to coś wspolnego z tym w jaki sposob i w jakiej kolejnosci przetwarzane są deklaracje/inicjalizacje.
Moze date = new Date(…) wykonane zostanie zanim wykonamy date.split() w zwiazku z czym zawsze bedziemy splitowac defaultowa date z 1970..?
date.setDate, nie powinno być .setDay?
A może ten setMonth(val – 1)?
W sumie to jest troche błędów w logice:
– brak deklaracji cnt; niby to js, ale resztę deklarujesz
– potem pętla z cnt = format.parts.length – też trochę dziwne; że po prostu nie ma: i < format.parts.length
– no i ostatnia rzecz; to niby if wymusza identycznosc tablic; ale parseInt robisz z parts a switcha na format.parts
Ale to zasadniczo wszystko składnia i dobre obyczaje a nie błędy :P
kod nie jest moj – musialem buga naprawic bo na niego natrafilem, ogolnie jest to kontrolka robiaca datapicker z twitter bootstraper – http://www.eyecon.ro/bootstrap-datepicker/
– deklaracja cnt jest: var i = 0, cnt = length; to tak jakbys zapisal: var i = 0; var cnt = length; jest to niby w for, ale zostanie to przez kompilator js przezucone do czesci var parts;
– to jest micro optimalization. kazda kropka w js (cos.wartosc) wymaga przegladania scope, zas length moze byc za kazdym razem przeliczany, dlatego w JS zaleca sie przypisywanie length do zmiennej;
– tak, ale tutaj format jest wporzadku. w sensie dozwolone ustawienie formatu to d|dd, m|mm| oraz yy|yyyy, separator tez jest okreslony -|/. to ogolnie dziala dla pewnego setu danych, oczywiscie nie dostaniemy daty poprawnej jezeli nie podamy wszystkich parametrow poprawnie. jednak my do tej funkcji zewnatrz nie mamy dostepu i jest ona tylko wykorzystywana internal
to jest poprawne: http://www.w3schools.com/jsref/jsref_setdate.asp
blisko, ale nie dokladnie to. kolejnosc przy deklarowaniu zmiennych jest taka jaka jest zapisana, to znaczy najpierw zostanie wykonany split a potem new Date.
aaa co do setMonth bo nie odpowiedzialem :)
http://www.w3schools.com/jsref/jsref_setmonth.asp – set month przyjmuje wartosci od 0 do 11. dlatego majad date 2010-10-10 przy ustawianiu miesiaca trzeba zrobic -1.
No to ostatnia próba, bo kończą mi się pomysły. Ale pamiętam że kiedyś z tym walczyłem i new Date() wymaga 7 parametrów a nie 6; ostatni to chyba milisekundy.
hmm… zakładanie że jest 2000+ rok jest raczej błędem, ale chyba nie o to chodzi?
podobnie month – 1?
hmm.. czy w JS operator przecinka dziala podobnie jak w C? wtedy parts = val, ktore no nie ma wartosci.
zastanawia mnie jeszcze val = parseInt ktory dla roku 2000 (podanego jako 00) moze zwrocic 2001?
month – 1 nie jest bleden, setMonth przyjmuje wartosci o 0 do 11, stad tez ten -1.
w tym wypadku val jest undefined – var x = 10, y, z = 5; alert(y === undefined)
prawda, parseInt dla formatu roku yy i wartosci 00 zwroci 1 jako ze tak dziala js i jest to bug w kodzie, jezeli Jakub tez o tym myslal to przyznaje i mu racje. umknal mi on :) chyle czolo :)
jednak jest bardziej wyrafinowany bug w tym wszystkim dla dat z yyyy (pelnym rokiem)
tak ogolnie: ktos w ogole korzysta z roku w formie yy ?
:) nie, nie ma z tym problemu, wartosci sa domysle wtedy
Nie, właśnie o tym nie myślałem; bo sprawdziłem tu http://codethink.no-ip.org/parseInt-test.html i teraz też zrobiłem test i zwraca poprawnie (FF – aktualna wersja).
Miałem na myśli "||", którego tam stosujesz – miałem wrażenie ze powinnno być "|".
Comments are closed.