Avatar billede mccookie Seniormester
09. januar 2006 - 23:19 Der er 16 kommentarer og
2 løsninger

Beregning af datoer

Hej Eksperter

Er der nogle der gider opridse de gense dato beregningsregler.

Skudår:

Uge 53 eller ej

og tjaja, om der måtte være øvrige regler....

På forhånd tak....
Avatar billede olebole Juniormester
10. januar 2006 - 01:08 #1
<ole>

Du må nok forklare lidt tydeligere, hvad det er, du efterlyser  :)

/mvh
</bole>
Avatar billede delphinarious Nybegynder
10. januar 2006 - 10:05 #2
Jeg kan heller ikke svare uden at vide, hvad du snakker om.

Men hvad angår skudår, så kan du bruge date("L") - den returner 1 hvis det er skudår og ellers 0... Den med uge 53 duer ikke helt, for der kan godt være en uge 53 uden at det er skudår. Det siger min logik mig i alt fald. 365 dage divideret med 7 dage giver 52,1429 - altså lidt mere end 52 uger... Så hvor vidt der er en uge 53 eller ej, afhænger blot af hvornår i ugen, året er startet. Men kig på date-funktionen http://dk2.php.net/manual/en/function.date.php og så spørg lidt mere konkret, hvis du skal have hjælp. ;-)
Avatar billede mccookie Seniormester
10. januar 2006 - 12:19 #3
Vedr. skudår, så er det naturligt at bruge date(L) funktionen

Det jeg nok eftersøger er en måde at tjekke om der er en uge 53 i indeværende år.

/hj
Avatar billede htm Nybegynder
10. januar 2006 - 12:29 #4
Hva med date("W") ?

der er 53 uger i året, hvis den sidste uge har 4 dage eller mere i det gamle år.

Så du kan jo tjekke om den 31 er en torsdag,fredag, lørdag eller søndag hvis du ikke kan bruge date("W")
Avatar billede mccookie Seniormester
10. januar 2006 - 12:35 #5
Tja, det var måske egentlig nok også det svar jeg ville havde givet mig selv ;=)

Smid nogle svar, jeg tror at jeg har fået så meget svar at jeg kan starte arbejdet :)
Avatar billede htm Nybegynder
10. januar 2006 - 12:35 #6
ok :-)
Avatar billede delphinarious Nybegynder
10. januar 2006 - 12:39 #7
Nu er jeg stået helt af. Skrev du ikke at du skulle finde ud af om et år var skudår? I så fald, brug date("L",$tid) hvor $tid er timestamp for det tidspunkt, hvor du ønsker at undersøge.

Hvis du skal undersøge om der er 53 uger i et år, så brug date("W",$tid) hvor $tid er timestamp for 31. december i det år, du vil undersøge. Hvis den returner 53, så er der 53 uger.

Og jeg har stadig ikke fattet, hvad det er du vil vide ("øvrige regler")...
Avatar billede delphinarious Nybegynder
10. januar 2006 - 12:39 #8
Jeg lader bare lige et svar falde, så kan du jo selv bestemme om jeg har fortjent points eller ej. ;-)
Avatar billede mccookie Seniormester
10. januar 2006 - 12:43 #9
Vedr. øvrige regler:
Det var blot om der var nogle :)

og det er tilsyneladende afløst af date(L og W) hehe
Avatar billede mccookie Seniormester
10. januar 2006 - 12:57 #10
For at bruge date(W) til at bestemme slutuge, så er mit bud at man skal pejle på datoen 27. dec.
Avatar billede delphinarious Nybegynder
10. januar 2006 - 14:11 #11
Hvorfor i alverden vil du bruge d. 27. december?? Det forstår jeg ganske enkelt ikke.. Den sidste dag i året, uanset ugetal, det er 31. december, det kan vi godt blive enige om, ikke?

Hvis den 31. ligger i uge 53, så er der jo 53 uger i et år, og hvis den ligger i uge 52, så er der ikke 53 uger, men kun 52.. Det er da simpelt? Hvor i alverden kom 27. december fra??
Avatar billede delphinarious Nybegynder
10. januar 2006 - 14:15 #12
Her er lige et lille eksempel på en funktion, der gør det:

function antalugeriaar($aar) {
    $tid = mktime("10","00","00","12","31",$aar);
    return date("W",$tid);
}

Kald funktionen med det årstal du skal finde ud, og du vil få smidt i hovedet hvor mange uger der er i det pågældende år.
Avatar billede delphinarious Nybegynder
10. januar 2006 - 14:21 #13
Ahhh nej ok - nu ser jeg at den failer.. Jeg testede lige med 2004, hvor den returnerede 53 og 2005 hvor den returnerede 52... Problemet opstår så, når jeg prøver 2003, der resulterer den 1, fordi uge 1 åbenbart er begyndt lidt i forvejen... hmmmm... træls! Men det løser altså intet, at bruge den 27. i stedet... Så får alle årstal bare 52...
Avatar billede delphinarious Nybegynder
10. januar 2006 - 14:24 #14
Lav den om til:

function antalugeriaar($aar) {
    $tid = mktime("10","00","00","12","28",$aar);
    return date("W",$tid);
}

Så tror jeg sq den er der... Det var d. 28., der var sværet. men check hellere lige efter med en kalender. :-)
Avatar billede delphinarious Nybegynder
10. januar 2006 - 14:25 #15
Resultat af sidst-postede funktion:

1995: 52 uger
1996: 52 uger
1997: 52 uger
1998: 53 uger
1999: 52 uger
2000: 52 uger
2001: 52 uger
2002: 52 uger
2003: 52 uger
2004: 53 uger
2005: 52 uger
2006: 52 uger
2007: 52 uger
2008: 52 uger
2009: 53 uger
Avatar billede delphinarious Nybegynder
10. januar 2006 - 14:28 #16
Yup, den er god nok. Har lige checket med KOrganisator. :-)
Avatar billede mccookie Seniormester
10. januar 2006 - 17:02 #17
Hehe, det forholder sig sådan at følgende betingelser skal opfyldes for at der optræder en uge 53.

1)
Uge 53 indeholder altid datoen 3. januar året efter,
men uge 53 eksisterer kun
hvis 27. december var en søndag.

2)
Uge 53 indeholder altid datoen 2. januar året efter,
men uge 53 eksisterer kun
hvis 26. december var en lørdag eller en søndag.

31/12 kan sagtens ligge uge 1 istedet for uge 52.

Skudår og uge 53 hænger ikke sammen om nødvendigt, det afhænger af hvornår d. 26 og 27. falder......
Avatar billede delphinarious Nybegynder
10. januar 2006 - 17:38 #18
Altså jeg tror vi konkluderede at sammenhængen imellem skudår og antallet af uger ikke eksisterede for 10 kommentarer siden. :-)

Men ok - det er muligt at dine betingelser er de korrekte, men min funktion virker og klarer skidtet på 2 liniers kode. Prøv selv efter. :-)

Læs nu lige ordenligt igennem hvad jeg er kommet frem til, og se med egne øjne at min funktion, med udgangspunkt i 28. december holder 100 %. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester