Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: JS: kuukauden laskuoperaatio

Sivun loppuun

Ämppi [31.03.2013 15:57:41]

#

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..

jlaire [31.03.2013 16:24:44]

#

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.

Ämppi [31.03.2013 16:40:12]

#

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..

peran [31.03.2013 16:49:02]

#

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ää.

Ämppi [31.03.2013 17:06:22]

#

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?!

peran [31.03.2013 17:53:13]

#

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

jlaire [01.04.2013 05:34:35]

#

Regex olis kyl paljon miehekkäämpi ku sata substring-kutsua.

Teuro [01.04.2013 08:41:12]

#

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);
}

Sivun alkuun

Vastaus

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

Tietoa sivustosta