06. september 2005 - 18:59Der er
13 kommentarer og 1 løsning
Beregning af dato
Hey,
Har følgende lille funktion: <script language="javascript"> var date = '01-01-2005'; var payment_term = 'LM10D'; function calculate_paymentdate(date, payment_term) { var monthdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);//Dage i måneder var arr = payment_term.split(/(\d+)/g);//Splitter betalingsbetingelsesstreng var curr_date = date.split("-");//Splitter givne dato var year = curr_date[2];//Givne år var month = curr_date[1]-1;//Givne måned var day = curr_date[0];//Givne dag if(arr[0] == 'LM') {//Hvis 'Løbende måned' var date = new Date(year,month,day);//Givet dato, formatteret JS style DaysInThisMonth = monthdays[month];//Dage i givne måned if (month == 1) { if (year%400==0 || (year%4 == 0 && year%100!=0) ) DaysInThisMonth +=1;}//Hvis skudår var payment_date = new Date(date.getYear(),date.getMonth(),DaysInThisMonth);//Sidste dag i indeværende måned payment_date.setDate(payment_date.getDate() + parseFloat(arr[1])); alert(payment_date); alert(arr[1]); } } </script>
Den beregner datoen ud fra en given dato, plus en streng som bestemmer hvorledes den beregnet dato skal være. Eks: Dato: 01-01-2005 Streng: LM10D (Løbende måned 10 dage) Resultat: 10-02-2005
Problemet er at jeg får nogen underlige resultater i FF, og i IE, får jeg ganske simpelt bare en NaN.
Jeg er klar over at det måske ikke er verdens mest gennemskuelige kode, men hvis det er så spørg endelig.
<script type="text/javascript"> var date = '01-01-2005'; var payment_term = 'LM 10 D';
function calculate_paymentdate(date, payment_term) { var monthdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31); //Dage i måneder var arr = payment_term.split(" "); //Splitter betalingsbetingelsesstreng
var curr_date = date.split("-"); //Splitter givne dato var year = curr_date[2]; //Givne år var month = curr_date[1]-1; //Givne måned var day = curr_date[0]; //Givne dag
if (arr[0] == 'LM') { //Hvis 'Løbende måned' var date = new Date(year, month, day); //Givet dato, formatteret JS style DaysInThisMonth = monthdays[month]; //Dage i givne måned
if (month == 1) { if (year%400==0 || (year%4 == 0 && year%100!=0)) DaysInThisMonth++; // Hvis skudår }
var payment_date = new Date(date.getYear(), date.getMonth(), DaysInThisMonth); //Sidste dag i indeværende måned payment_date.setDate(payment_date.getDate() + parseInt(arr[1]));
En alternativ mulighed er denne her - hvor at du ikke behøver at indføre mellemrum i din variabel payment_term:
<script type="text/javascript"> var date = '01-01-2005'; var payment_term = 'LM10D';
function calculate_paymentdate(date, payment_term) { var monthdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31); //Dage i måneder
var re = new RegExp("^([^0-9]+)([0-9]+)([^0-9]+)$", "g"); re.exec(payment_term); //Splitter betalingsbetingelsesstreng
var arr = new Array(3) arr[0] = RegExp.$1; arr[1] = RegExp.$2; arr[2] = RegExp.$3;
var curr_date = date.split("-"); //Splitter givne dato var year = curr_date[2]; //Givne år var month = curr_date[1]-1; //Givne måned var day = curr_date[0]; //Givne dag
if (arr[0] == 'LM') { //Hvis 'Løbende måned' var date = new Date(year, month, day); //Givet dato, formatteret JS style DaysInThisMonth = monthdays[month]; //Dage i givne måned
if (month == 1) { if (year%400==0 || (year%4 == 0 && year%100!=0)) DaysInThisMonth++; // Hvis skudår }
var payment_date = new Date(date.getYear(), date.getMonth(), DaysInThisMonth); //Sidste dag i indeværende måned payment_date.setDate(payment_date.getDate() + parseInt(arr[1]));
Nielle: Undskyld du har ret, jeg havde bare overbevist mig selv om at det var 'g' der gjorde forskellen, men det viser sig at jeg derefter benyttede FF til at teste, da dets JS console er noget mere informativ:
Imidlertid så har jeg lavet lidt om i funktionen, og umiddelbart fungere den nu perfekt i FF, men i IE får jeg fortsat en 'NaN' - Kan du forklare hvorfor?
<script language="javascript"> var date = '01-01-2005'; var payment_term = 'LM10D'; function calculate_paymentdate(date, payment_term) { var monthdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);//Dage i måneder var arr = payment_term.split(/(\d+)/);//Splitter betalingsbetingelsesstreng i f.eks. LM & D var days = payment_term.match(/(\d+)/);//Fanger antallet af dage i betalingsstreng var curr_date = date.split("-");//Splitter givne dato var year = parseInt(curr_date[2]);//Givne år var month = parseInt(curr_date[1]-1);//Givne måned var day = parseInt(curr_date[0]);//Givne dag var date = new Date(year,month,day);//Givet dato, formatteret JS style if(arr[0] == 'LM') {//Hvis 'Løbende måned' daysthismonth = monthdays[month];//Dage i givne måned if (month == 1) { if (year%400==0 || (year%4 == 0 && year%100!=0) ) daysthismonth +=1;}//Hvis skudår var payment_date = new Date(year,month,daysthismonth + parseInt(arr[1]));//Sidste dag i indeværende måned } else if (arr[0] == 'NET') { var payment_date = new Date(year,month,day + parseInt(days[0])); } alert(payment_date); } </script>
<script type="text/javascript"> var date = '01-01-2005'; var payment_term = 'LM10D';
function calculate_paymentdate(date, payment_term) { var monthdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31); //Dage i måneder
var arr = payment_term.split(/(\d+)/); //Splitter betalingsbetingelsesstreng i f.eks. LM & D var days = payment_term.match(/(\d+)/); //Fanger antallet af dage i betalingsstreng
var curr_date = date.split("-"); //Splitter givne dato var year = parseInt(curr_date[2]); //Givne år var month = parseInt(curr_date[1]-1); //Givne måned var day = parseInt(curr_date[0]); //Givne dag
var date = new Date(year, month, day); //Givet dato, formatteret JS style
if (arr[0] == 'LM') { //Hvis 'Løbende måned' daysthismonth = monthdays[month]; //Dage i givne måned
if (month == 1) { if (year%400==0 || (year%4 == 0 && year%100!=0)) daysthismonth++; //Hvis skudår }
var payment_date = new Date(year, month, daysthismonth); //Sidste dag i indeværende måned payment_date.setDate(payment_date.getDate() + parseInt(days[0])); } else if (arr[0] == 'NET') { var payment_date = new Date(year, month, day + parseInt(days[0])); }
<script type="text/javascript"> var date = '01-01-2005'; var payment_term = 'LM10D';
function calculate_paymentdate(date, payment_term) { var monthdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31); //Dage i måneder
var arr = payment_term.match(/([^\d]+)(\d+)([^\d]+)/); //Fanger delene som nr. 1, 2 og 3 i arr
var curr_date = date.split("-"); //Splitter givne dato var year = curr_date[2]; //Givne år var month = curr_date[1]-1; //Givne måned var day = curr_date[0]; //Givne dag
var date = new Date(year, month, day); //Givet dato, formatteret JS style
if (arr[1] == 'LM') { //Hvis 'Løbende måned' daysthismonth = monthdays[month]; //Dage i givne måned
if (month == 1) { if (year%400==0 || (year%4 == 0 && year%100!=0)) daysthismonth++; //Hvis skudår }
var payment_date = new Date(year, month, daysthismonth); //Sidste dag i indeværende måned payment_date.setDate(payment_date.getDate() + parseInt(arr[2])); } else if (arr[1] == 'NET') { var payment_date = new Date(year, month, day + parseInt(arr[2])); }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.