webForumDet fria alternativet

Datumfält som uppdaterar varandra

3 svar · 397 visningar · startad av pb81

pb81Medlem sedan okt. 200688 inlägg
#1

Hejsan!
Jag har två fält där man skall ange datum (2009-12-17), FromDate och ToDate. Det jag vill få till nu är att om man anger ett datum FromDatefältet så skall ToDatefältet plusa på med en dag med onChange. Och ändrar man i ToDate så skall FromDate bli minus en dag.

Går detta o lösa på ett smidigt sätt. Och det är viktigt att datumet skrivs in i rätt format.

Mvh // Paul

JojoxxMedlem sedan juni 20004 308 inlägg
#2
<script type="text/javascript">
Date.prototype.format=function(str){
	str=str.replace(/%D/g,("0"+this.getDate()).substring(("0"+this.getDate()).length-2));
	str=str.replace(/%Y/g,this.getFullYear());
	str=str.replace(/%N/g,("0"+(this.getMonth()+1)).substring(("0"+(this.getMonth()+1)).length-2));
	return str;
}
Date.prototype.fromStr=function(str){
	var d=new Date(0);
	var p=(p)?p:str.match(/(\d+)\-(\d+)\-(\d+)/); p=(p)?p.concat(0,0,0,0):p;
	if(p){ d.setFullYear(p[1]); d.setMonth(p[2]-1); d.setDate(p[3]); }
	return d;
}
</script>

<form>
Fr o m <input type="text" name="FromDate" onchange="var d=new Date().fromStr(this.value).getTime(); if(d>0){ this.form.ToDate.value=new Date(d+86400000).format('%Y-%N-%D'); }">
T o m <input type="text" name="ToDate" onchange="var d=new Date().fromStr(this.value).getTime(); if(d>0){ this.form.FromDate.value=new Date(d-86400000).format('%Y-%N-%D'); }">
</form>
pb81Medlem sedan okt. 200688 inlägg
#3

Fungerade ju kanon.
Kom dock på en sak som måste fungera oxå. jag ändrade lite och ökade till 3 dagar nu.. men om spannet är mindre än 3 dagar så måste man kunna sätta det. typ 2009-12-16 - 2009-12-17, dvs den skall inte ändras tre dagar då.

JojoxxMedlem sedan juni 20004 308 inlägg
#4
<script type="text/javascript">
Date.prototype.format=function(str){
	str=str.replace(/%D/g,("0"+this.getDate()).substring(("0"+this.getDate()).length-2));
	str=str.replace(/%Y/g,this.getFullYear());
	str=str.replace(/%N/g,("0"+(this.getMonth()+1)).substring(("0"+(this.getMonth()+1)).length-2));
	return str;
}
Date.prototype.fromStr=function(str){
	var d=new Date(0);
	var p=(p)?p:str.match(/(\d+)\-(\d+)\-(\d+)/); p=(p)?p.concat(0,0,0,0):p;
	if(p){ d.setFullYear(p[1]); d.setMonth(p[2]-1); d.setDate(p[3]); }
	return d;
}
var ddays=3;
</script>

<form>
Fr o m <input type="text" name="FromDate" onchange="var d=new Date().fromStr(this.value).getTime(); if(d>0 && (new Date().fromStr(this.form.ToDate.value).getTime()>d+86400000*ddays || !this.form.ToDate.value || new Date().fromStr(this.form.ToDate.value).getTime()<=d)){ this.form.ToDate.value=new Date(d+86400000*ddays).format('%Y-%N-%D'); }">
T o m <input type="text" name="ToDate" onchange="var d=new Date().fromStr(this.value).getTime(); if(d>0 && (new Date().fromStr(this.form.FromDate.value).getTime()<d-86400000*ddays || !this.form.FromDate.value || new Date().fromStr(this.form.FromDate.value).getTime()>=d)){ this.form.FromDate.value=new Date(d-86400000*ddays).format('%Y-%N-%D'); }">
</form>
137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)