[PHP] Jaar index van dagen in een willekeurige week

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De date/time functies van PHP zijn redelijk uitgebreid, maar tot een nette oplossing kon ik nog niet komen:

Ik heb de jaarindex van de dagen in een willekeurige week van een bepaald jaar nodig. Dus als parameters heb ik een jaar en een weeknr 0-52 en als resultaat wil ik 7 cijfers tussen 0-365.

Ik heb het reeds geprobeerd met strtotime, maar die kan alleen relatief met weeks om gaan (ie: +1 week).
De beste oplossing tot nu toe is op 1-1 beginnen en loopen per 7 dagen, waarbij je in de loop dmv date() checked welke week we zitten, maar dat is wel erg ranzig.

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Je praat een beetje vaag, althans ik kan je niet volgen. Wat mij logisch lijkt.

Je kan php de dag van het jaar terug laten geven, vervolgens kijk je op welke dag dat valt, dan haal je de overige dagen van die week op door er de weekdag van af te halen heb je de eerste dag van de week, en nu kun je met een heel simpel loopje de overige 7 dagen pakken

Edit: tis echt makkelijk op te lossen in een 10 min. heb ik het gescript :)

In totaal 11 regels, maar omdat ik vind dat je openingspost niet echt laat zien dat je er zelf al veel tijd in hebt gestoken vind ik niet dat je het verdient om een oplossing volledig aan gereikt te krijgen.

Functies die ik nodig had:

www.php.net/date
www.php.net/mktime

[ Voor 37% gewijzigd door martinvw op 14-03-2003 10:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
M4rt1nvW schreef op 14 maart 2003 @ 10:28:
...maar omdat ik vind dat je openingspost niet echt laat zien dat je er zelf al veel tijd in hebt gestoken vind ik niet dat je het verdient om een oplossing volledig aan gereikt te krijgen.....
Grapjas, ik geef notabene zelf al een mogelijk oplossing, alleen is deze super ranzig. :)

Het uitgangspunt is een weeknr (0-52) en niet een dag :). Dus je wil de dag nr's (0-365) van bijvoorbeeld week 30 hebben.

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
okeej, nou dan was je openingspost veel te onduidelijk want dit haalde ik er echt niet.

Maar wat heb je nou zelf precies al geprobeerd en wat was er zo smerig aan jou oplossing?

[ Voor 35% gewijzigd door martinvw op 14-03-2003 11:33 ]


Acties:
  • 0 Henk 'm!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 12:59

Freee!!

Trotse papa van Toon en Len!

Misschien een puntje van aandacht:
Sommige jaren hebben 53 weken en soms valt 1 januari in de laatste week van het voorafgaande jaar.

Het makkelijkste is het gewenste weeknummer nemen, vermenigvuldigen met 7, voor de veiligheid hier drie of vier dagen bij optellen, kijken of je in de gewenste week zit (zal vrijwel altijd het geval zijn), 1 week optellen of aftrekken indien je niet in de gewenste week zit en dan de dag van de week bepalen. Daarvandaan is het bepalen van de rest van de dagen in die week eenvoudig genoeg.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Mr. Liu schreef op 14 March 2003 @ 11:25:
Misschien een puntje van aandacht:
Sommige jaren hebben 53 weken en soms valt 1 januari in de laatste week van het voorafgaande jaar.

Het makkelijkste is het gewenste weeknummer nemen, vermenigvuldigen met 7, voor de veiligheid hier drie of vier dagen bij optellen, kijken of je in de gewenste week zit (zal vrijwel altijd het geval zijn), 1 week optellen of aftrekken indien je niet in de gewenste week zit en dan de dag van de week bepalen. Daarvandaan is het bepalen van de rest van de dagen in die week eenvoudig genoeg.
Waarom ga je er dagen bij optellen of van afhalen, doe gewoon maal 7 - 1 week dan kom je volgens mij altijd op een dag uit die in de week valt?
Want volgens mij bouw jij gewoon een extra onzekerheid in of zie ik iets over het hoofd?

Jouw puntje van aandacht wordt volgens mij bij het goede gebruik van de php-datum functies automatisch gecorrigeerd.

Daarnaast heb ik al weer een zeer simpel scriptje wat doet wat de TS wil.

Maar ik zou de TS willen aanraden eerst zelf wat met date en mktime te experimenteren want meer is er niet nodig behalve een lusje wat 7 keer draait.

[ Voor 25% gewijzigd door martinvw op 14-03-2003 11:50 . Reden: spelvout ]


Acties:
  • 0 Henk 'm!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 12:59

Freee!!

Trotse papa van Toon en Len!

M4rt1nvW schreef op 14 March 2003 @ 11:35:
[...]
Waarom ga je er dagen bij optellen of van afhalen, doe gewoon maal 7 - 1 week dan kom je volgens mij altijd op een dag uit die in de week valt?
Want volgens mij bouw jij gewoon een extra onzekerheid in of zie ik iets over het hoofd?
Oeps, had inderdaad niet optellen maar aftrekken moeten zijn. De reden: Rekening houden met het feit dan 1 januari niet altijd op dezelfde dag en mogelijk in de laatste week van het vorige jaar valt :P

Reken zelf maar uit (maar het is en blijft een rot-probleem :P )

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Gaat goed, lang leve php :D

Zal zo ff een linkje posten.

http://www.woppa.nl/sites...weekblaat.php?y=2002&w=53
http://www.woppa.nl/sites...eweekblaat.php?y=2000&w=5
http://www.woppa.nl/sites/martin/timeweekblaat.php

Voor y en w kan je dus zelf een jaar en week invullen

boven geeft hij vriendelijk al die dagen ff weer, onder de lijn staat de array die de functie terugggeeft

[ Voor 82% gewijzigd door martinvw op 14-03-2003 16:50 . Reden: linkje ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mr. Liu schreef op 14 March 2003 @ 11:25:
Misschien een puntje van aandacht:
Sommige jaren hebben 53 weken en soms valt 1 januari in de laatste week van het voorafgaande jaar.

Het makkelijkste is het gewenste weeknummer nemen, vermenigvuldigen met 7, voor de veiligheid hier drie of vier dagen bij optellen, kijken of je in de gewenste week zit (zal vrijwel altijd het geval zijn), 1 week optellen of aftrekken indien je niet in de gewenste week zit en dan de dag van de week bepalen. Daarvandaan is het bepalen van de rest van de dagen in die week eenvoudig genoeg.
De week index begint ook bij 0, dus bevat idd maximaal 53 items (zelfde voor de dag index: 366 items).

Je oplossing werkt prima, het is natuurlijk raar dat je moet blijven 'testen' of je wel in de juiste week zit (wat dat kan je idd niet met zekerheid vast stellen). Ik had verwacht dat PHP hier wel een nettere manier voor had, maar blijkbaar niet.

Bedankt voor je hulp iig.

Acties:
  • 0 Henk 'm!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 12:59

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 14 March 2003 @ 11:58:
[...]
Je oplossing werkt prima, het is natuurlijk raar dat je moet blijven 'testen' of je wel in de juiste week zit (wat dat kan je idd niet met zekerheid vast stellen). Ik had verwacht dat PHP hier wel een nettere manier voor had, maar blijkbaar niet.
Ik weet van geen enkele programmeertaal waar netjes met weken gerekend wordt. Ik weet wel dat ik er voor het pakket waar ik aan werk jaren terug een keer een routine heb geschreven voor dit probleem en daarna heb ik het verder allemaal vergeten (behalve hoe die routine te gebruiken natuurlijk :P )
Bedankt voor je hulp iig.
Graag gedaan.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
Wat ik dus zei was dat je helemaal geen vreemde berekening hoef te doen want mijn script werkt zonder hij doet gewoon zonder die bereking ik zal vanavond de source nog wel ff laten zien want met de goede php-date/time functies is er dus niks aan, en lost hij schrikkeljaren en week 53 vanzelf op. Kijk maar naar de ouput van mijn script met de input van de bovenste link in mijn vorige post.

Of misschien moet dat ook wel en zie ik nog steeds ergens iets over het hoofd maar de TS heeft zijn probleem opgelost dus zal ik maar weer gaan leren voor die stomme tentamens.

[ Voor 19% gewijzigd door martinvw op 14-03-2003 16:53 ]


Acties:
  • 0 Henk 'm!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 12:59

Freee!!

Trotse papa van Toon en Len!

M4rt1nvW schreef op 14 March 2003 @ 16:43:
Wat ik dus zei was dat je helemaal geen vreemde berekening hoef te doen want mijn script werkt zonder hij doet gewoon zonder die bereking ik zal vanavond de source nog wel ff laten zien want met de goede php-date/time functies is er dus niks aan, en lost hij schrikkeljaren en week 53 vanzelf op. Kijk maar naar de ouput van mijn script met de input van de bovenste link in mijn vorige post.
Ik ben best benieuwd, dit heeft namelijk wel mijn interesse. Wat zijn de mogelijkheden voor omzetting naar COBOL?

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function convert($week = 0, $Y = 0){
    if ($week == 0) 
        $week = date("W");
    if ($Y == 0)
        $Y = date("Y");
    
    $timestamp = mktime(0, 0, 0, 1, 7 * ($week - 1), $Y);
    $startday = (date("z", $timestamp) - date("w", $timestamp) + 1);
    for ($i = $startday; $i < ($startday + 7); $i++){
        $stamp[] =  $i;
        echo date ("l dS of F Y h:i:s A", mktime(0, 0, 0, 1, $i, $Y))."<BR>";
    }
    echo "<HR>";
    return $stamp;
}

hij lijkt wel een bugje te hebben in het begin van het jaar :S
Pagina: 1