webForumDet fria alternativet

Datum validering

2 svar · 515 visningar · startad av GrodanBoll

GrodanBollMedlem sedan sep. 2001789 inlägg
#1

Hej hej

Kan man validera att ett datum finns m.h.a. JavaScript?
Jag vill t.ex. inte att mna ska kunna skriva 2002-15-89 som ett datum.

*Håller tummarna* :)

/Grodan

JojoxxMedlem sedan juni 20004 306 inlägg
#2

Se denna tidigare tråd.

GrodanBollMedlem sedan sep. 2001789 inlägg
#3

Hmm, var inte riktigt det jag var ute efter.
Jag ville kunna kolla så att datumet var dels rätt inskrivet med siffror och så sen ska datumet oxå vara giltigt.

Jag fixade ihopa ett script själv då eftersom jag inte hittade någe färdigt.
Vet inte om jag har kodat på bästa sätt men det funkar iaf :)

Koden kommer här om någon är intresserad:

/////
// kollar datum, om fältet är siffor och om datumet är större än dagens datum YYYYMMDD
// indata är 'formulärnamn.fältnamn'
/////
function chkDate (falt)
{
	var faltvarde = eval ("this." + falt + ".value"); // här kollar jag vilket värde som fältet har
	
	faltvarde = Trim(faltvarde);
	
	if (isInteger (faltvarde) && faltvarde.length == 8) // kollar om det inmatade värdet är 8 st siffror
	{
		// dela upp värdet så att jag kan kolla månad och dag
		var faltvardeAr = faltvarde.substring(0,4); // YYYY
		var faltvardeManad = faltvarde.substring(4,6); // MM
		var faltvardeDag = faltvarde.substring(6,8); // DD
		
		var err = "ingetfel";
		
		// kollar så att man inte skriver in en fel månad
		if ((faltvardeManad < 1) || (faltvardeManad > 12))
		{
			err = "Månaden är felaktig";
		}
		else
		{
			// hålla koll på skott-år
			if ((faltvardeAr % 4 == 0) || (faltvardeAr % 100 == 0) || (faltvardeAr % 400 == 0))
			{
				var skottar = 1;
			}
			
			// kollar så att man inte skriver in fel dag
			if (faltvardeDag < 1)
			{
				err = "Månaden kan inte ha mindre än en dag";
			}
			// februari koll om det är skott-år
			if ((faltvardeManad == 2) && (skottar == 1) && (faltvardeDag > 29))
			{
				err = "Det är skottår, d.v.s månaden har inte mer än 29 dagar";
			} 
			// februari koll om det INTE är skott-år
			if ((faltvardeManad == 2) && (skottar != 1) && (faltvardeDag > 28))
			{
				err = "Det är inte skott år, d.v.s. månaden kan inte ha mer än 28 dagar";
			}
			// kollar de andra månaderna (31-dagars månaderna)
			if ((faltvardeDag > 31) && ((faltvardeManad == "01") || (faltvardeManad == "03") || (faltvardeManad == "05") || (faltvardeManad == "07") || (faltvardeManad == "08") || (faltvardeManad == "10") || (faltvardeManad == "12")))
			{
				err = "Månaden har inte mer än 31 dagar";
			}
			// kollar de andra månaderna (30-dagars månaderna)
			if ((faltvardeDag > 30) && ((faltvardeManad == "04") || (faltvardeManad == "06") || (faltvardeManad == "09") || (faltvardeManad == "11")))
			{
				err = "Månaden har inte mer än 30 dagar";
			}
		}
		
		// har där kommit ett felmeddelande?
		if (err != "ingetfel")
		{
			alert (err);
			eval ("this." + falt + ".select()"); // makerar allt i rutan
			eval ("this." + falt + ".focus()"); // sätter focus i rutan igen			
		}
		else
		{		
			datum = new Date();
			if ((datum.getMonth()+1) < 10) // om månadsnummret är mindre än -> 10 lägg till en nolla
			{
				var manaden = "0" + (datum.getMonth()+1);
			}
			else	
			{
				var manaden = "" + (datum.getMonth()+1);
			}
		
			if (datum.getDate() < 10) // om dagsnummret är mindre än -> 10 lägg till en nolla
			{
				var dagen = "0" + datum.getDate();
			}
			else
			{
				var dagen = "" + datum.getDate();
			}
			
			var dagensdatum = "" + datum.getYear() + manaden + dagen;
				
			if (dagensdatum > faltvarde)
			{
				alert("Du måste ange ett datum som ligger i framtiden.");
				eval ("this." + falt + ".select()"); // makerar allt i rutan
				eval ("this." + falt + ".focus()"); // sätter focus i rutan igen
			}
		}
	}	
	else
	{
		if (!isBlank (faltvarde)) // om det inte är 8 siffror ska den även göra en koll om fältet är tomt
		{
			alert ("Formatet du ska mata in är:\nYYYYMMDD\nD.v.s. åtta siffror.\nAlternativt matar du inte in något alls.");
			eval ("this." + falt + ".select()"); // makerar allt i rutan
			eval ("this." + falt + ".focus()"); // sätter focus i rutan igen
		}
	}
}
Genererad på 359 ms · cache AV · v20260730165559-full.f96bc7eb