Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: JavaScript: Javascript Date

Macro [13.12.2011 18:00:58]

#

Terve

Mistäköhän johtuu, että seuraava toimii

alert(new Date("2011-12-14"))

mutta seuraava ei

alert(new Date("14.12.2011"))

vaikka tämä toimii?

alert(new Date("09.12.2011"))

Tuli vaan eräässä projektissa vastaan, kun kokeilin ohjelmaa tänään ja tuloksena onkin virhe päivän sijaan.

Metabolix [13.12.2011 18:11:26]

#

Minulla ei ainakaan Firefoxissa toimi noista pisteellisistä kumpikaan. Chromiumissa tosiaan viimeinen "toimii", mutta tarkempi vilkaisu osoittaa, että päiväykseksi tulee 12. syyskuuta, mikä heti selittääkin, miksi keskimmäinen versio ei kelpaa ollenkaan.

The Alchemist [13.12.2011 20:04:46]

#

Päivämäärien ja kellonaikojen käsittely on kyllä itselle ollut yksi tuskaisimmista asioista, mitä JS:llä voi joutua tekemään, mikäli ei käytä mitään helpottavaa kirjastoa. Jostain syystä tähän ei ole tainnut vieläkään tulla parannusta, vaikka websocketteja ja WebGL:ää ja ties mitä on kyllä kehitetty.

Grez [13.12.2011 20:28:34]

#

Omasta mielestäni päivämäärien käsittelyssä ei ole javascriptissä mitään hankalaa. Tai no, aivokuollut tammikuu=0 tietysti vähän häiritsee, mutta sehän ei ole JS:n yksinoikeus.

Yucca [13.12.2011 22:45:17]

#

Date-konstruktorin toiminta on ihan standardin mukaankin toteutuksesta riippuvaa. Ei nyt ihan näillä sanoilla, mutta olennaisesti näin. ECMASscript 5:n mukaan sen tulee selvitä ainakin ISO 8601:n mukaisesta notaatiosta, kuten 2011-12-14, mutta tämäkään ei välttämättä päde vanhimmissa toteutuksissa.

Missään tapauksessa ei pidä olettaa, että Date-konstruktori tai Date.parse-funktio selviäisi mistään muista lokalisoiduista merkinnöistä (kuten suomalaisista) kuin niistä, joista jokin toteutus sattuu selviämään.

Tästä seuraa, että vaikka mitään lokalisointia ei erityisesti harkittaisikaan, kannattaa päivämäärien tms. tulkinta hoitaa paremmin toteutetuilla tavoilla. Olen epätasapainoinen (I’m biased): suosittelen kirjaani ”Going Global with JavaScript and Globalize.js” tai ainakin Globalize.js-kirjastoon tutustumista (vaikka sen dokumentaatio onkin sekava, mikä loi mukavan markkinaraon...); Googlella löytyy.

Macro [14.12.2011 20:23:19]

#

Jeps, nähtävästi tuo jälkimmäinen tulkittiinkin 21.9.2011... Noh, tein tämän näköisen viritelmän:

var pvm = new Date(document.forms[0].d1.value.split(".").reverse().join("-"));

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta