Tunnen itseni idiootiksi kysyessäni näin yksinkertaista ongelmaa, mutta:
if (sStartDate) { objDate = new Date(); objDate.setFullYear(parseInt(sStartDate.substring(4), 10)); objDate.setMonth(parseInt(sStartDate.substring(0, 2), 10) - 1); objDate.setDate(parseInt(sStartDate.substring(2, 4), 10)); ndDateChooser.DateChooser.setStartDate(objDate); }
Ohjelma on hakenut päivämäärän, esimerkiksi sStartDate = 04012013. Nyt sitten jatkoa varten lauseen tiedot heitetään oikeille paikoilleen.
Esimerkin tapauksessa pitäisikin saada irti huhtikuun eka päivä.
Ohjelma kuitenkin tyrkyttää toukokuun ensimmäistä.
Ja minä en saa päähäni, miksi tuo vähennysoperaatio ei pelitä.. help..
new Date() palauttaa tänään päivämäärän 31.3. Ilmeisesti koska huhtikuussa on vain 30 päivää, päivämäärä muuttuu automaattisesti muodosta 31.4. muotoon 1.5. Ratkaisu on muuttaa rivien järjestystä ja asettaa ensin päivä, sitten vasta kuukausi, jolloin tällaista ylivuotoa ei voi tapahtua.
Meinasin jo sanoa, että ongelma korjautui,
mutta sitten ilmeni että vain osalla sivuista. Luulen kylläkin että tämä uusi ongelma johtunee sitten jostakin ihan muusta..
Itse muuttaisin koodin seuraavanlaiseksi:
if (sStartDate) { objDate = new Date(); objDate.setDate(parseInt(sStartDate.substring(2, 4), 10)); objDate.setFullYear(parseInt(sStartDate.substring(4), 10)); objDate.setMonth(parseInt(sStartDate.substring(0, 2), 10) - 1); objDate.setDate(parseInt(sStartDate.substring(2, 4), 10)); ndDateChooser.DateChooser.setStartDate(objDate); }
Niin ei tule helmikuun lopulla ongelmaa, että päivä ei näytä 28:nen päivän jälkeen oikeata päivää.
Kiitti peran.
Tosiaan, ongelma ilmenee vain niiden kuukausien joissa ei ole 31 päivää yhteydessä. En ole kokenut JS-ohjelmoinnissa ja tämäkin ohjelma on vierasta alkuperää, joten en nyt ihan hahmota mikä mitäkin tekee.
Kun ne 31-päiväiset kuukaudet toimivat ihan oikein niin häh?!
Toimiiko seuraava, kun en jaksa testata.
if (sStartDate) { objDate = new Date(parseInt(sStartDate.substring(4),10),parseInt(sStartDate.substring(0, 2), 10) - 1,parseInt(sStartDate.substring(2, 4), 10)); ndDateChooser.DateChooser.setStartDate(objDate); }
Lähde: http://msdn.microsoft.com/en-us/library/ie/cd9w2te4(v=vs.94).aspx
Regex olis kyl paljon miehekkäämpi ku sata substring-kutsua.
Itselläni on tällaiset javascript koodinpätkät päivämäärien validointiin.
function check_date(date) { var pattern = /^([0-9]{4})\-([0-9]{2})\-([0-9]{2})\s([0-9]{2}):([0-9]{2}):([0-9]{2})$/i; return pattern.test(date); } function make_date(data) { var parts = data.split(/[\-:\s]{1}/); var date = new Date(parts[0], parts[1]-1, parts[2], parts[3], parts[4], parts[5], 0); return date; }
Esimerkki
var date_string = "2013-03-01 01:00:00"; if (check_date(date_string)) { var date = make_date(date_string); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.