Hej.. Jag skulle validera tidsformat enligt följande hh:mm jag sklal alltså inte kunna skriva in tid i dessa textrutor i något annat format än detta.
Jag skulle även behöva jämföra två fält av denna typ där den ena fältets tid tidsmässigt ligger efter det första. Jag har ett formulär för bokningar och vill inte att man skall kunna boka en tid från 17:00 till 13:15 då den senare tiden är före den andra. Hoppas att ni förstår vad jag menar.
textruta1 är starttime
textruta2 är stoptime
stoptime måste alltid ligga senare än starttime. hur gör jag detta??
Jesper TMedlem sedan nov. 20017 144 inlägg Titta på dessa funktioner
<SCRIPT>
function dateDiff(strDate1,strDate2){
datDate1= Date.parse(strDate1);
datDate2= Date.parse(strDate2);
return (datDate2-datDate1)/(24*60*60);
};
function validateTime(str){
if(!str.match(/^(\d{1,2}):(\d{2})$/)){ return false; }
return (RegExp.$1<24 && RegExp.$2<60);
};
alert(validateTime("23:59"));
alert(dateDiff("Mon Mar 20 2006 11:23:47 GMT+0100","Mon Mar 20 2006 11:33:47 GMT+0100"));
</SCRIPT>
Behöver jag hela datumet enligt Mon Mar 20 2006 11:23:47 GMT+0100 för att den skall kunna veta att det gäller samma dag eller? Sen förstår jag inte riktigt vad dateditt funktionen returnerar. Har jag förstått det rätt såhär: om funktionen returnerar ett positivt tal så har jag faktiskt anget en senare tid som ut än som in (så som det skall vara), om inte så är uttiden före intiden, alltså inte korrekt.. eller??
String.prototype.isValidTime = function(){
if(this.match(/(\d{2}):(\d{2})/) != null){
var h = parseInt(RegExp.$1,10);
var m = parseInt(RegExp.$2,10);
if(h >= 0 && h <= 23 && m >= 0 && m <= 59)
return true;
}
return false;
}
Detta löste uppgiften perfekt, se kod nedan.. tack för alla inlägg. Någon som kan hjälpa mig med hur jag validerar datum enligt formatet "2006-01-01" på samma vis. dvs kontrollera att det är inskrivet på detta vis samt att ett startdatum ligger före ett stopdatum.
<script type="text/javascript">
function settime(t){
var dt = new Date();
dt.setHours(t.split(":")[0]);
dt.setMinutes(t.split(":")[1]);
dt.setSeconds(0);
return dt;
};
function datediff(a,b){
var a = Date.parse(a);
var b = Date.parse(b);
return ((b-a)/(24*60*60*1000));
};
function validateTime(str){
if(!str.match(/^(\d{1,2}):(\d{2})$/)){
return false;
}
return (RegExp.$1<24 && RegExp.$2<60);
};
function validdate(f){
//Ta bort spacetecken
f.t1.value = f.t1.value.replace(/\s/g,"");
f.t2.value = f.t2.value.replace(/\s/g,"");
if(!validateTime(f.t1.value)||!validateTime(f.t2.value)){
alert("Tidsformatet stämmer inte (tt:mm)!");
return false;
}
if(datediff(settime(f.t1.value),settime(f.t2.value))<=0){
alert("Stoptiden får inte vara före eller lika med starttiden!");
return false;
}
return true;
};
</script>
<form name="foo" methode="post" action="?" onsubmit="return validdate(this)">
Starttid:<input type="text" name="t1"> <br>
Stoptid:<input type="text" name="t2">
<input type="submit" name="submit" value="Go!">
</form>
Ingen som kan hjälpa mig med motsvarande fast för datumvalidering istället, har försökt ändra i det för tid men jag lyckas inte få det att fungera..
Varfor krangla till det sa mycket? Anvand Date-klassens funktionalitet istallet.
var datum=new Date("Mon Mar 20 2006 11:23:47 GMT+0100");
if(isNaN(datum)){
alert("Fel format pa datumet!");
}else{
alert("Tidpunkten intraffade under ar " + datum.getFullYear());
}
Förstår inte hur jag skall använda mig av detta. Det jag vill att användaren skall skriva in är datum enligt "2006-01-01" jag vill kontrollera att det ser ut på detta sätt samt att jag inte kan ange månad 13 eller dag 32 osv. Jag behöver även kontrollera två sådana datum mot varandra så att det ena ligger före det andra. Precis så som jag kunde göra med Jesper T:s lösning med tid. går det inte bara att anpassa det ovanstående så att det passar för datum istället för tid??
Med javascripts inbyggda funktioner måste datumet anges med månaden utskriven med tre (eller fler) bokstäver på engelska, till exempel jun, june, aug, augu eller august. I övrigt går det som du vill att göra.
Jämförelse:
var datum1 = "12 jan 2006";
var datum2 = "15 june 1999";
if (datum1 < datum2){
// datum1 är före datum2
}else{
// datum2 är före datum1
}
Validering av tid:
var tidstrang = prompt("Skriv in ett tidsslag på formen hh:mm[:ss]","12:22");
var datum = new Date("Jan 1 1970 " + tidstrang);
if (isNaN(datum)){
// Felaktigt tidsformat
}
Tidsskillnad:
var year1=new Date("Jan 1 2006");
var year2=new Date("Jan 1 2003");
alert("Tidpunkterna ligger " + (new Date(year1-year2).getYear()-70) + "år mellan varandra.")
Jag har gjort kontrollen med lite stränghantering på sidan där jag sparar värdena förut. Vill dock göra det med Javascript istället. formatet som användaren skriver in är alltså ex 2006-01-01, inget annat. Jag vill inte göra om detta..
Återupptar denna tråd som jag startade för rätt länge sen.. Står åter inför utmaningen att dels kontrollera att två fält innehåller ett korrekt datumformat och därefter kontrollera så att det ena värdet ligger efter det andra. Precis som ni hjälpte mig med tid tidigare. Formatet som användaren skriver in är enligt ÅÅÅÅ-MM-DD
har ett fält som heter startdatum och ett som heter slutdatum. Slutdatum måsta alltid ligga efter startdatum. Det skall heller inte gå att ange felaktiga datum typ 2007-13-01 eller 2007-02-31
hoppas någon kan hjälpa mig.. får helt enkelt inte till det med javascript