Avatar billede Six Nybegynder
22. april 2006 - 23:17 Der er 23 kommentarer og
1 løsning

PHP: Antal uger på et år.

Hej eksperter, jeg er ved at kode et system der selv skal kunne identificere en ting, ud fra hvilken uge vi er i og hvad dag i den uge det er.

Mit problem er så...

nogle år er der 53 uger... andre er der ikke... - hvordan ved jeg hvilke år der er 53 uger ?
Avatar billede hmortensen Nybegynder
22. april 2006 - 23:24 #1
Vil tro du kan gøre sådan her:

function AntalUger($aar)
{
  return date("W", mktime(0, 0, 0, 12, 31, $aar));
}
Avatar billede Six Nybegynder
22. april 2006 - 23:30 #2
Der er point der. :D - det virker. :D smid svar. Og tak for hjælpen.
Avatar billede erikjacobsen Ekspert
22. april 2006 - 23:31 #3
Lige knap nok. Den 31. december kan ligge i uge 1, 52, eller 53.  I sidste tilfælde er der 53 uger i året, ellers er der 52.
Avatar billede Six Nybegynder
22. april 2006 - 23:33 #4
Er der nogle bestemte regler for hvornår der er 53 uger på et år ? - er det i skudår eller hvad ?
Avatar billede erikjacobsen Ekspert
22. april 2006 - 23:35 #5
Der er større chance i skudår, men det er ikke reglen. http://jeppesn.dk/uge.html
Avatar billede Six Nybegynder
22. april 2006 - 23:39 #6
Det var da et helt godt link du lige smed der. Tak for det :D
Avatar billede erikjacobsen Ekspert
22. april 2006 - 23:42 #7
Ja, godt, der findes tids- og datonørder. Pas på hvis du snakker uger med folk fra tredieverdenslande, som fx USA, der kan have en anden opfattelse af hvad ugenumre er - de bruger ikke ISO-standarden. Der kan ugenummeret blive forskudt med een.
Avatar billede erikjacobsen Ekspert
22. april 2006 - 23:45 #8
Eksempel: kig på http://www.timeanddate.com/calendar/  for Danmark og USA for år 2005. 22 april 2005 var i uge 16 for Danmark, og uge 17 for USA.
Avatar billede Six Nybegynder
22. april 2006 - 23:49 #9
Ja det kan jeg godt se hehe. - Jeg bliver altid let forvirret over det her tid og dato.

Jeg takker for forklaringerne og dine links. :D
Avatar billede hmortensen Nybegynder
23. april 2006 - 11:22 #10
Erik, vil den her være bedre så:
function AntalUger($aar)
{
  $dag = 31;
  $uge = 1;
  while ($uge == 1)
    $uge = date("W", mktime(0, 0, 0, 12, $dag--, $aar));
  return $uge;
}
Avatar billede codebase Praktikant
24. april 2006 - 00:56 #11
ISO week number may be between 1 and 53.  Under the ISO standard, week 1 will always have at least 4 days.  If 1-Jan falls on a Friday, Saturday, or Sunday,  the first few days of the year are defined as being in the last (52nd or 53rd) week of the previous year.

Unlike absolute week numbers, not every year will have a week 53.  For example, the year 2000 does not have a week 53.  Week 52 begins on Monday, 25-Dec, and ends on Sunday, 31-Dec.  But the year 2004 does have a week 53, from Monday, 27-Dec , through Friday, 31-Dec.
Avatar billede codebase Praktikant
24. april 2006 - 00:56 #12
Avatar billede erikjacobsen Ekspert
24. april 2006 - 08:59 #13
hmortensen: Unødigt komplikeret (men sikkert korrekt, har ikke testet). Tag ugenummeret på den sidste dag på året. Der er 3 udfald:

  ugenummer("31. december 20xx")=1    ->    År 20xx har 52 uger (og lidt af uge 1 fra år 20xx+1)
  ugenummer("31. december 20xx")=52  ->    År 20xx har 52 uger
  ugenummer("31. december 20xx")=52  ->    År 20xx har 53 uger
Avatar billede erikjacobsen Ekspert
24. april 2006 - 08:59 #14
Sidste linie skal rettes til
  ugenummer("31. december 20xx")=53  ->    År 20xx har 53 uger
Avatar billede hmortensen Nybegynder
24. april 2006 - 09:01 #15
Må da være den simpelste måde at teste det på. Hvis uge tal er 1, trækkes en fra dagen, hvilket max giver 3-4 gennemløb på et "uheldigt" år.
Avatar billede erikjacobsen Ekspert
24. april 2006 - 09:07 #16
3-4 gennemløb i forhold til een if-sætning? Jeg vil godt vædde et halvt kilo friske mælkebøtteblade på hvad der er simplest ;)
Avatar billede hmortensen Nybegynder
24. april 2006 - 09:46 #17
Ah, havde ikke læst det ordentligt.
Reglen om at hvis 31/12 giver uge 1, så er der 52 uger, passer 100%?
Avatar billede erikjacobsen Ekspert
24. april 2006 - 10:00 #18
Ja, læs noget af det der er linket til.
Avatar billede hmortensen Nybegynder
24. april 2006 - 10:51 #19
Ja så er det jo bare en if.
function AntalUger($aar)
{
  if (($uge = date("W", mktime(0, 0, 0, 12, 31, $aar))) == 1)
    return 52;
  else
    return $uge;
}
Avatar billede erikjacobsen Ekspert
24. april 2006 - 11:21 #20
Eller - måske mere tydeligt (mais c'est la même chose):

function AntalUger($aar) {
  switch (date("W", mktime(0, 0, 0, 12, 31, $aar))) {
    case 1: case 52: return 52;
    case 53:        return 53;
  }
}
Avatar billede Six Nybegynder
24. april 2006 - 15:23 #21
Der er godt nok lige sket noget her siden jeg kiggede sidst. :D - og det ser jo glimragende ud.

Smider i nogle svar ? :D
Avatar billede erikjacobsen Ekspert
24. april 2006 - 15:25 #22
Jeg samler slet ikke på point, tak.
Avatar billede Six Nybegynder
24. april 2006 - 15:32 #23
Det er i orden erikjacobsen. jeg takker for din deltagelse. - Jeg tillader mig at uddele point til hmortensen når han smider et svar.

Tak for jeres hjælp. - Codebase, tak for din interesse også.
Avatar billede hmortensen Nybegynder
24. april 2006 - 19:06 #24
Svar.
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