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.
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.
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.
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.
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.
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("-"));
Aihe on jo aika vanha, joten et voi enää vastata siihen.