Hej cddk, :)
- Jeg havde lige glemt at ligge 1 til måneder hvilket man skal hvis man bruger getMonth() på et Date objekt (derfor den gale måned i dags dato).
- Jeg har formateret dato'erne til formen dd-mm-yyyy så der proppes et "0" foran hvis enten dag eller måned er mindre end 10 (hvis det var det du mente). Denne formatering sker i 'writeDate(tbId, date)'-metoden.
- Jeg har samtidigt ændret at udregningerne først udføres når der forlades et felt. Dette løser det problem du beskrev med at Dato ændres når man hopper videre til Måneder.
<html xmlns="
http://www.w3.org/1999/xhtml"> <head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/JavaScript">
var outputId = "output";
var dateNow;
var oneMonth = 1000*60*60*24*31;
function intializeDateNow(tbId)
{
dateNow = new Date();
writeDate(tbId, dateNow);
}
function writeOutput(msg)
{
document.getElementById(outputId).value = msg;
}
function writeDate(tbId, date)
{
var days = date.getDate().toString();
var month = (date.getMonth()+1).toString();
var years = date.getFullYear().toString();
days = days.length == 1 ? "0" + days : days;
month = month.length == 1 ? "0" + month : month;
document.getElementById(tbId).value = days + "-" + month + "-" + years;
}
function calculateMonths(elmDate, monthId)
{
writeOutput("");
var arrDate = elmDate.value.split("-");
if(arrDate.length != 3 || arrDate[2].length != 4)
{
writeOutput("'Dato' field must be of form: dd-mm-yyyy");
return;
}
var strDay = arrDate[0];
var strMonth = arrDate[1];
var strYear = arrDate[2];
var tmpDate = new Date(strYear, strMonth, strDay);
if( isNaN(tmpDate) )
{
writeOutput("'Dato' field must be of form: dd-mm-yyyy");
elmDate.focus();
return;
}
tmpDate = new Date(tmpDate.toGMTString());
var gmtDate = new Date(dateNow.toGMTString());
if(tmpDate < dateNow)
{
writeOutput("'Dato' skal være senere en Dags dato");
elmDate.focus();
return;
}
var newDate = Math.floor((tmpDate.getTime() - dateNow.getTime())/oneMonth);
document.getElementById(monthId).value =newDate;
}
function calculateDate(elmDate, dateId)
{
writeOutput("");
if(elmDate.value == "")
return;
var months = parseInt(elmDate.value);
if( isNaN(months) || months < 0)
writeOutput("Måneder skal være en heltalsværdi større en 0.");
var date = new Date(dateNow.toGMTString());
var newDate = new Date(date.getYear(), date.getMonth() + months, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
writeDate(dateId, newDate);
}
</script>
</head>
<body onload="intializeDateNow('datenow');">
<table>
<tr>
<td style="width: 100px;">Dags dato:</td>
<td><input id="datenow" type="text" readonly="readonly" /></td>
</tr>
<tr>
<td>Dato:</td>
<td><input id="date" type="text" onchange="calculateMonths(this, 'month');" /></td>
</tr>
<tr>
<td>Måneder:</td>
<td><input id="month" type="text" onchange="calculateDate(this, 'date')" /></td>
</tr>
<tr>
<td>Output:</td>
<td><input id="output" readonly="readonly" type="text" style="width: 600px; border: 0; color: Red;" /></td>
</tr>
</table>
</body>
</html>
Lidt dumme fejl jeg havde overset, men det blev også lidt sent igår! :)
Du må lige skrive hvis der stadig mangler noget! :)
Mvh.
- Snap