webForumDet fria alternativet

Datumfält som uppdaterar varandra

JavaScript

3 svar · 399 visningar · startad av pb81

Medlem sedan okt. 200688 inlägg
Frågan#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

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

Medlem 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>
265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)