[php/date-functions] Aantal weken in een jaar

Pagina: 1
Acties:
  • 245 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 26421

Topicstarter
Ben bezig met een kalenderfunctie, en stuit op het probleem dat ik niet zeker weet of ik moet aannemen (= vaste waarde gebruiken in een scriptje) dat een jaar 52 weken heeft. Kan ik hier vanuit gaan of is dat niet waar? Het scriptje wordt louter in Nederland gebruikt en is daarom gebaseerd op het Gregoriaanse kalanderstelsel.

Weet iemand hoeveel weken jaar X in Nederland heeft en of dit elk jaar hetzelfde is?

Acties:
  • 0 Henk 'm!

Anoniem: 86328

http://nl2.php.net/date

date("W")

Sommige jaren hebben 53 weken overigens, kan je gewoon aan deze functie vragen door een optionele tweede parameter mee te geven met een timestamp uit dat jaar.

Acties:
  • 0 Henk 'm!

  • Peter
  • Registratie: Januari 2005
  • Laatst online: 23-04 22:33
Iets als;

PHP:
1
2
3
4
5
6
7
function Weken( $jaar = 0 ){
    if( $jaar == 0 ){
        $jaar = date( "Y" );
        }

    return date( "W", mktime( 0, 0, 0, 1, 1, $jaar ) );
    }


:)

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 28-07-2022

djc

De vraag is natuurlijk ook hoe je het aantal weken in een jaar definieert.

Als het gaat om het nummeren van weken, dan mag je niet aannemen dat er 52 weken zijn: in sommige jaren is er een week 53. Als het gaat om het aantal dagen gedeeld door 7, dan is het duidelijk genoeg dat er 52 en 1/7 of 2/7 weken in een jaar gaan.

Rustacean


Acties:
  • 0 Henk 'm!

Anoniem: 26421

Topicstarter
.Peter schreef op vrijdag 24 februari 2006 @ 13:03:
Iets als;

PHP:
1
2
3
4
5
6
7
function Weken( $jaar = 0 ){
    if( $jaar == 0 ){
        $jaar = date( "Y" );
        }

    return date( "W", mktime( 0, 0, 0, 1, 1, $jaar ) );
    }


:)
Als 1 januari op een maandag valt (dit is toevallig het geval in 2007) dan krijg je met jouw `functie` vanzelfsprekend `1` terug. Ik wil echter het aantal weken van een jaar hebben (en niet het weeknummer van 1 januari, zoals jij met de functie date() tevoorschijn haalt)?
Manuzhai schreef op vrijdag 24 februari 2006 @ 13:03:
De vraag is natuurlijk ook hoe je het aantal weken in een jaar definieert.

Als het gaat om het nummeren van weken, dan mag je niet aannemen dat er 52 weken zijn: in sommige jaren is er een week 53. Als het gaat om het aantal dagen gedeeld door 7, dan is het duidelijk genoeg dat er 52 en 1/7 of 2/7 weken in een jaar gaan.
Het gaat om weeknummers zoals we die in Nederland gebruiken. Waarbij weken beginnen op de maandag (conform de Gregoriaanse kalender).

[ Voor 49% gewijzigd door Anoniem: 26421 op 24-02-2006 13:18 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Het weeknummer waarin 31 december valt is automatisch ook het aantal weken in een jaar lijkt me?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 26421

Topicstarter
-NMe- schreef op vrijdag 24 februari 2006 @ 13:28:
Het weeknummer waarin 31 december valt is automatisch ook het aantal weken in een jaar lijkt me?
Dat is - helaas, zou me veel werk besparen - niet waar. Dit heeft ook een reden waar ik later op terugkom. Zo valt 31 december 2007 op een maandag, waarbij dat week 1 van 2008 wordt.

De reden dat 31dec. in week 1 van 2008 kan vallen, is de volgende.
Afwegingen over weken (`in welk jaar valt een week?`) worden als volgt gemaakt: als een week 4 of meer dagen van een jaar in zich heeft (in het voorbeeld van eind dec. 2007 is er 1 dag van 2007 in week x (namelijk 31 dec.), en 6 dagen van 2008 in week x en dus wordt gesteld dat week x een week van het jaar 2008 wordt, en dus week 1 in dit geval).
PHP:
1
echo date("w", mktime(0,0,0,12,31,2007)); // == 1


Kortom, het probleem blijft bestaan.
Tot hoever loopt de weeknummering door van een bepaald jaar?

[ Voor 12% gewijzigd door Anoniem: 26421 op 24-02-2006 13:45 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Dan is het nog steeds simpel: als het weeknummer van 31 december niet 53 is, dan heeft het jaar 52 weken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 26421

Topicstarter
-NMe- schreef op vrijdag 24 februari 2006 @ 13:44:
Dan is het nog steeds simpel: als het weeknummer van 31 december niet 53 is, dan heeft het jaar 52 weken.
Mogen we dus stellen dat een jaar 52 óf 53 weeknummers heeft? Kan een jaar geen 51- of 54 weken hebben in uitzonderlijke gevallen?

[ Voor 6% gewijzigd door Anoniem: 26421 op 24-02-2006 13:47 ]


Acties:
  • 0 Henk 'm!

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
Anoniem: 26421 schreef op vrijdag 24 februari 2006 @ 13:47:
[...]


Mogen we dus stellen dat een jaar 52 óf 53 weeknummers heeft? Kan een jaar geen 51- of 54 weken hebben in uitzonderlijke gevallen?
jups :)

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 13:54

Dido

heforshe

51 gaat je niet lukken omdat 365 dagen al meer dan 52 x 7 dagen is ;)
54 ook niet. Er vallen maximaal 3 dagen van "vorig" jaar in week 1. Dan heb je 369 dagen maximaal tot het einde van het jaar. Dat is 52 weken en 5 dagen, maximaal week 53 dus.

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

Anoniem: 26421

Topicstarter
Dido schreef op vrijdag 24 februari 2006 @ 13:53:
51 gaat je niet lukken omdat 365 dagen al meer dan 52 x 7 dagen is ;)
54 ook niet. Er vallen maximaal 3 dagen van "vorig" jaar in week 1. Dan heb je 369 dagen maximaal tot het einde van het jaar. Dat is 52 weken en 5 dagen, maximaal week 53 dus.
Goede redenering! Dank allen:

Een jaar heeft in Europese tijd (Gregoriaans) 52 of 53 weeknummers

[ Voor 4% gewijzigd door Anoniem: 26421 op 24-02-2006 13:57 ]


Acties:
  • 0 Henk 'm!

Anoniem: 45470

Wellicht overbodig want jullie waren er al uit maar ik wou nog even bevestigen dat Ivy het enige juiste antwoord gaf. Een week moet minimaal 4 dagen van een jaar in zich hebben, en daardoor kan een jaar 52 of 53 weken hebben. Ik zat laatst met hetzelfde probleem.
Anoniem: 26421 schreef op vrijdag 24 februari 2006 @ 13:43:
De reden dat 31dec. in week 1 van 2008 kan vallen, is de volgende.
Afwegingen over weken (`in welk jaar valt een week?`) worden als volgt gemaakt: als een week 4 of meer dagen van een jaar in zich heeft (in het voorbeeld van eind dec. 2007 is er 1 dag van 2008 in week x (namelijk 31 dec.), en 6 dagen van 2008 in week x en dus wordt gesteld dat week x een week van het jaar 2008 wordt, en dus week 1 in dit geval).

Acties:
  • 0 Henk 'm!

  • corani
  • Registratie: December 2000
  • Laatst online: 05-10-2017

corani

__,,,_(^_^)_,,,__

Anoniem: 45470 schreef op vrijdag 24 februari 2006 @ 15:36:
Wellicht overbodig want jullie waren er al uit maar ik wou nog even bevestigen dat Ivy het enige juiste antwoord gaf. Een week moet minimaal 4 dagen van een jaar in zich hebben, en daardoor kan een jaar 52 of 53 weken hebben. Ik zat laatst met hetzelfde probleem.
[...]
Dit is niet helemaal correct.. Er zijn namelijk ook mensen die er vanuit gaan dat week 1 de week is waar 1 januari in valt, of de eerste volledige week in januari.

Laat me nou toch eens met rust man!
Iedereen die in telekinese gelooft, steek a.u.b. mijn hand op


Acties:
  • 0 Henk 'm!

Anoniem: 127584

corani schreef op vrijdag 24 februari 2006 @ 17:30:
[...]


Dit is niet helemaal correct.. Er zijn namelijk ook mensen die er vanuit gaan dat week 1 de week is waar 1 januari in valt, of de eerste volledige week in januari.
Inderdaad, de definitie van week 1 is eigenlijk regioafhankelijk. In Windows bijvoorbeeld zijn er meerdere definities voorgedefinieerd en kun je daartussen switchen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 01-05 10:36

NMe

Quia Ego Sic Dico.

Hier in Nederland is de bovengenoemde manier anders zonder meer gangbaar. ;) In Amerika voor zover ik weet ook trouwens, dus daarmee heb je de belangrijkste mensen wel gehad. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 13:50
In het Europese systeem is het inderdaad zo dat de eerste week van het jaar de week is met 4 of meer dagen in het nieuwe jaar. Hieruit kun je afleiden dat 4 januari altijd in de eerste week van het jaar valt. Dezelfde truuk kun je ook voor de laatste week van het jaar toepassen. Daarin liggen immers minimaal 4 dagen in het oude jaar. Dat betekent dat 28 December altijd in de laatste week van het jaar ligt.

Een klein probleempje bij een implementatie in PHP is dat date("W") standaard uitgaat van Amerikaanse weken. Een Amerikaanse week start op zondag terwijl we in Europa vinden dat een week op maandag start. Afhankelijk van wat je precies met de waarde wil gaan doen zul je dus een correctie moeten toepassen.
In PHP kun je daarmee in een statement het aantal weken in een jaar bepalen, namelijk:
PHP:
1
$numberOfWeeks=date("W", mktime(0,0,012, 28, $year);

Regeren is vooruitschuiven

Pagina: 1