Autor Zpráva
ondrej256
Profil *
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
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
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ť inputu 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?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: