21. september 2006 - 15:54Der er
7 kommentarer og 1 løsning
Hjælp til kalender script
Jeg skal have hjælp til at lave et script, der kan fraregne weekender, helligdage og faste ferier.
Jeg har et felt (r533) der indtastes en endelig deadline i. Der skal nu regnes 3 mellem deadlines, baglæns ud fra felt r533. Felterne til deadlines er følgende, r533, r532, r531 og r530. Felterne der bestemmer dagene imellem deadlines er r533a, r532a og r531a. Jeg har ikke helt bestemt mig for hvordan ferien skal defineres, men den skal kunne ændres af en administrator, på en anden side.
Der er altså effektive arbejdsdage, der skal være imellem de forskellige deadlines, derfor skal den automatisk springe over weekender, helligdage og ferier.
-- for det første skal du jo have fod på helligdage og ferier, før du starter beregningerne, så de skal være til rådighed for scriptet på siden ...
-- derefter skal du sørge for, at eventuelle sammenfald imellem almindelige weekend-dage og disse ikke betyder, at der fratrækkes for lidt eller for mange dage ...
-- og så skal du sikre at dine start- og slut-beregninger dur uanset ugedage ...
-- selvfølgelig skal du også lige have fod på at disse er valide ...
-- afhængig af dine grunddata kan det vise sig at være nemmest at steppe en dag frem ad gangen og så inkrementere en tæller, hvis ikke dagen er indeholdt i de uduelige dage ...
-- men forhåbentlig kan du finde ud af det med en hurtigere algoritme ...
-- men ellers er det nok ikke et tidsmæssigt problem at gøre det langsomt, jeg vil gætte på, at det aldrig vil komme op på at tage mere end en tiendedel sekund selvom du skal beregne 200 arbejdsdage, og du har 200 helligdage liggende i et array, der skal gennemsøges for hver dag !-)
Jeg har nu selv lavet noget, som tager højde for weekender og helligdag, troede jeg for da jeg skulle teste det virkede det 2006 men ikke 2005...
Noget af koden skal tilpasset, da jeg laver nogle krumspring, men det bliver efter jeg har fået det til at virke.
Men hvorfor tæller den ikke helligdagene i 2005 med?
Derudover mangler jeg så de faste ferier.
//Find dato til felt 532 for (maanedsdage = 1; maanedsdage <= arbejdsdage; maanedsdage++){ originalt = (Date.parse(original));//parse til millisekunder var udregnDag = originalt - (maanedsdage*24*60*60*1000); //udregne den nye dag //alert(originalt);
var nydag_532 = new Date();//til skabelse af den nye dag
var tmpDag = nydag_532.setTime(udregnDag);//Ellers kan jeg ikke sat tiden, men hvorfor er den nødvendig? midDag_531 = tmpDag;//dag fra 1-1-1970
Hmm, jeg kan se er den omkring påskesøndag d. 28/3/2005 pludselig skifter tidszone. Før den dag regnes der i UTC+2 kl. 00.00, derefter UTC+1 kl. 23.00. Samtidig hvis jeg beder den om at udskrive datoerne, så springer den over 28/3
Nå der er et eller andet med tidszonerne omkring sommertid start, måske også slut, som jeg ikke lige kan gennemskue. Derfor har jeg ændret koden så den ikke køre på millisekunder, men på dato i stedet.
//Find dato til felt 532 for (maanedsdage = 1; maanedsdage <= arbejdsdage; maanedsdage++){ //alert(maanedsdage + " " + arbejdsdage); originalt = (Date.parse(original));//parse til millisekunder var udregnDag = originalt - (maanedsdage*24*60*60*1000); //udregne den nye dag //alert(originalt);
var nydag_532 = new Date();//til skabelse af den nye dag
var tmpDag = nydag_532.setTime(udregnDag);//Ellers kan jeg ikke sat tiden, men hvorfor er den nødvendig? midDag_531 = tmpDag;//dag fra 1-1-1970
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.