Autor | Zpráva | ||
---|---|---|---|
ondrej256 Profil * |
#1 · Zasláno: 24. 10. 2014, 17:49:44
Dobrý den,
potřebuju javascriptem zpracovat datum zadaný do input type = "date". Když načtu hodnotu: var date= $("#datum").val(); přetypuju na datum var Date = new Date(date); a zavolám metodu getDay() Date.getDay() tak se den lišší od zadaného dnu v inputu Například zadám 1.10. 2014 a při volání metod getDay a getMonth se vypíše: den: 3 měsíc: 9 Nevíte někdo jak je to možné? |
||
Zechy Profil |
#2 · Zasláno: 24. 10. 2014, 20:00:26
ondrej256:
getMonth vrací čísla od 0 do 11. getDay vrací den v týdnu. Tudíž 1. 10. bude zjevně 3. den v týdnu. |
||
Chamurappi Profil |
#3 · Zasláno: 24. 10. 2014, 21:50:31
Reaguji na ondreje256:
„Když načtu hodnotu“ Nemalé množství dnes používaných prohlížečů nezná type="date" , v nich nelze garantovat, jak přesně vypadá value . Typicky to bude něco, co člověk vyplnil ručně a čemu konstrutor Date určitě neporozumí.
„var Date = new Date(date);“ Co to? Tohle ti přeci musí vyvolat chybu, ve tvé lokální proměnné Date je undefined a ne konstruktor.
|
||
Joker Profil |
ondrej256:
„var Date = new Date(date);“ Právě jsem objevil úplně novou úroveň nevhodného pojmenování proměnných :-) > Například zadám 1.10. 2014 a při volání metod getDay a getMonth se vypíše: > den: 3 > měsíc: 9 Což je správně. Zkusil jste si přečíst, co ty metody vlastně dělají a co vracejí? Chamurappi: „Tohle ti přeci musí vyvolat chybu, ve tvé lokální proměnné Date je undefined a ne konstruktor.“
Tak tady můžu zamachrovat (no dobře, hlavně díky tomu, že se shodou okolností oživilo tohle vlákno :-) ): Kupodivu ta šílenost fungovat bude, protože JS má dvě pro mě ne úplně pochopitelná pravidla: Deklarace proměnných a definice funkcí se neprovádějí v místě kde jsou uvedené, ale na začátku kódu, a když koliduje deklarace proměnné s definicí funkce, vyhrává definice funkce. Takže funkci (konstruktor) Date() zničí až inicializace proměnné Date , která se ale dělá až po volání Date() .
Doplnění: Samozřejmě případná další volání Date() už fungovat nebudou. |
||
_es Profil |
ondrej256:
„var Date = new Date(date);“ Lokálna premenná Date „prekryje“ svojim názvom globálny objekt/funkciu Date.
Joker: „Kupodivu ta šílenost fungovat bude, protože JS má dvě pro mě ne úplně pochopitelná pravidla: Deklarace proměnných a definice funkcí se neprovádějí v místě kde jsou uvedené, ale na začátku kódu, a když koliduje deklarace proměnné s definicí funkce, vyhrává definice funkce.“ Fungovať to bude len v globálnom kóde, nie vo vnútri funkcie. A asi by to malo byť niekde vo vnútri funkcie, keďže inde ako v reakcii na nejakú udalosť input u nemá veľmi zmysel zisťovať jeho hodnotu. Preto aj Chamurappi písal o lokálnej premennej. No ak píše, že mu to funguje, tak to asi má v globálnom kóde - aký je však potom praktický zmysel toho celého?
|
||
Časová prodleva: 9 let
|
0