PDA

Bekijk Volledige Versie : een week en een maandag onder PHP



Jelle Sjollema
22/08/04, 13:25
Kan iemand mij helpen met een datumfunctie onder PHP. Ik heb een weeknummer
en wil vervolgens weten wat de datum (of direct de timestamp) is van de
eerste maandag in die week? Bij voorbaat dank.

jelle

Branko Collin
22/08/04, 13:55
"Jelle Sjollema" <jelles@spambl_xs4all.nl>, you wrote on Sun, 22 Aug
2004 13:23:35 +0200:

>Kan iemand mij helpen met een datumfunctie onder PHP. Ik heb een weeknummer
>en wil vervolgens weten wat de datum (of direct de timestamp) is van de
>eerste maandag in die week? Bij voorbaat dank.

Het lijkt me dat je eerst moet uitvinden wanneer de eerste week van
het jaar was. Als je dat weet, kun je de timestamp opvragen van de
nulde seconde van de eerste dag van die week, en daar

((weeknummer - 1) × seconden per week)

bij optellen. Dan heb je de timestamp van de maandag van de week die
je zoekt.

Nodig:

- date() (met 'W'-optie om een weeknummer op te vragen)

- time() (om de timestamp van nu op te vragen)

- strtotime() (om de timestamp van andere tijdstippen te raden)

Het viel me ooit op dat verschillende kalendermakers verschillende
systemen lijken te gebruiken voor het bepalen van weeknummers. PHP
4.1.x gebruikt ISO-8601, dat blijkbaar onder andere bepaalt dat
maandag de eerste dag van de week is. (Barbaren!)

--
branko collin
collin@xs4all.nl

robert
22/08/04, 14:25
Branko Collin <collin@xs4all.nl>:
> "Jelle Sjollema" <jelles@spambl_xs4all.nl>, you wrote on Sun, 22 Aug
> 2004 13:23:35 +0200:
>
>>Kan iemand mij helpen met een datumfunctie onder PHP. Ik heb een
>>weeknummer en wil vervolgens weten wat de datum (of direct de timestamp)
>>is van de eerste maandag in die week? Bij voorbaat dank.
>
> Het lijkt me dat je eerst moet uitvinden wanneer de eerste week van het
> jaar was. Als je dat weet, kun je de timestamp opvragen van de nulde
> seconde van de eerste dag van die week, en daar
>
> ((weeknummer - 1) × seconden per week)
>
> bij optellen. Dan heb je de timestamp van de maandag van de week die je
> zoekt.

En dan maar hopen dat je geen problemen gaat krijgen met schrikkeljaren en
zomer- of wintertijd...

--
robert

Onno
22/08/04, 15:05
> Kan iemand mij helpen met een datumfunctie onder PHP. Ik heb een
weeknummer
> en wil vervolgens weten wat de datum (of direct de timestamp) is van de
> eerste maandag in die week? Bij voorbaat dank.

<?php
echo gmstrftime ("%A %d-%b-%y %T %Z", strtotime("1 January 2004 + 20
weeks"));
?>

Het gaat dus om het stukje strtotime, maar die doet idd een timestamp. Je
kan de 1 January string qua jaartal opbouwen met huidige jaar...

Onno
22/08/04, 15:05
> <?php
> echo gmstrftime ("%A %d-%b-%y %T %Z", strtotime("1 January 2004 + 20
> weeks"));
> ?>

Ik las het fout, je kan met de verkregen timestamp wel snel de maandag
uitrekenen door strftime("%u", $mydate) te doen, die geeft de dag van de
week (1 = maandag, heb je dus 3 dan moet je er nog 4 dagen bijoptellen om op
de 1e maandag van die week te komen. Maar dat lukt je wel, met bovenstaande
hoef je geen zorgen te maken over schrikkeljaren e.d.

Jelle Sjollema
22/08/04, 18:25
"Onno"

> Ik las het fout, je kan met de verkregen timestamp wel snel de maandag
> uitrekenen door strftime("%u", $mydate) te doen, die geeft de dag van de
> week (1 = maandag, heb je dus 3 dan moet je er nog 4 dagen bijoptellen om
op
> de 1e maandag van die week te komen. Maar dat lukt je wel, met
bovenstaande
> hoef je geen zorgen te maken over schrikkeljaren e.d.

Precies, door de oplossingen van jou en Branko ben ik zelf op de volgende
oplossing gekomen:

$t_first_day=mktime(0, 0, 0, $month, 1, $year);
$first_week = date("W",$t_first_day);
$first_day=date("w",$t_first_day);

if($first_day == 0)
{
$t_first_monday = mktime(0, 0, 0, $month, $first_day + 2, $year);
}


if($first_day>1)
{
$t_first_monday = mktime(0, 0, 0, $month, 2 - $first_day, $year);
}

if($first_day == 1)
{
$t_first_monday = mktime(0, 0, 0, $month, $first_day, $year);
}

$first_monday = date("D d m Y",$t_first_monday);

echo $first_monday;



Hier komt in ieder geval steeds de eerste maandag uit, alhoewel ik niet snap
waarom bij de optie $first_day == 0 er twee moet optellen, maar het werkt.
Bedankt.

jelle (gaat nu hetzelfde voor de laatste vrijdag van de maand bedenken)

John Bokma
22/08/04, 21:55
"Jelle Sjollema" <jelles@spambl_xs4all.nl> wrote in
news:41288226$0$48933$e4fe514c@news.xs4all.nl:

Ik dacht aan een of ander dagboek, over de ervaring van iemand met 8 dagen
PHP :-D.

--
John Voorbeeldscripts in Perl:http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html

Rene Pijlman
22/08/04, 22:05
John Bokma:
>Jelle Sjollema:
>Ik dacht aan een of ander dagboek, over de ervaring van iemand met 8 dagen
>PHP :-D.

Ik las eerst "zonder PHP"
^
.... en begreep niet wat het probleem kon zijn :-)

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Jelle Sjollema
22/08/04, 23:45
"Rene Pijlman"

> Ik las eerst "zonder PHP"
> ^
> ... en begreep niet wat het probleem kon zijn :-)

Het probleem bleek achteraf ook wel mee te vallen

jelle (heeft gewoon een hekel aan tijd- en datumfuncties)

Rene Pijlman
23/08/04, 00:05
Jelle Sjollema:
>jelle (heeft gewoon een hekel aan tijd- en datumfuncties)

Me too. In applicaties, database drivers e.d. die datum/tijd-formaten
moeten converteren en manipuleren is dit vaak goed voor 25% van de bugs.
Wat een narigheid.

Het wordt tijd voor een wereldregering, die de wereld indeelt in 10
tijdzones, het jaar in 10 maanden, de maand in 10 dagen, de dag in 10 uur,
het uur in 10 minuten (dit alles in één verplichte universele decimale
notatie) ... en... DE ZOMERTIJD AFSCHAFT!

Dan houden we alleen nog dat gezeur van webservers in een bepaalde
tijdzone, met gebruikers in alle andere tijdzones.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Erick T. Barkhuis
23/08/04, 00:15
Rene Pijlman [on Mon, 23 Aug 2004 00:02:38 +0200] wrote:

> Het wordt tijd voor een wereldregering, die de wereld indeelt in 10
> tijdzones, het jaar in 10 maanden, de maand in 10 dagen, de dag in 10 uur,
> het uur in 10 minuten (dit alles in één verplichte universele decimale
> notatie) ... en...

Ik zag vandaag de 100 meter hardgelopen worden in een tijd onder de 10
seconden.
Vraagje: wat gebeurt er met al die atletiek-records als jouw hartewens in
vervulling gaat? Converteren of vergeten?

--
Erick

Rene Pijlman
23/08/04, 00:15
Erick T. Barkhuis:
>Rene Pijlman:
>> Het wordt tijd voor een wereldregering, die de wereld indeelt in 10
>> tijdzones, het jaar in 10 maanden, de maand in 10 dagen, de dag in 10 uur,
>> het uur in 10 minuten (dit alles in één verplichte universele decimale
>> notatie) ... en...
>
>Ik zag vandaag de 100 meter hardgelopen worden in een tijd onder de 10
>seconden.
>Vraagje: wat gebeurt er met al die atletiek-records als jouw hartewens in
>vervulling gaat? Converteren of vergeten?

De lengte van een meter wordt zodanig aangepast dat de records geldig
blijven.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Erick T. Barkhuis
23/08/04, 00:25
Rene Pijlman [on Mon, 23 Aug 2004 00:09:40 +0200] wrote:
> Erick T. Barkhuis:
> >Rene Pijlman:
> >> [...wil decimale tijdsindeling...]

> >Vraagje: wat gebeurt er met al die atletiek-records als jouw hartewens in
> >vervulling gaat? Converteren of vergeten?
>
> De lengte van een meter wordt zodanig aangepast dat de records geldig
> blijven.

Ik was er al bang voor dat de ver- en hoogspringers, alsmede de
speervangers en discushappers de klos zouden worden...

--
Erick

"Whether you think you can or you can't - you're right!"

Rene Pijlman
23/08/04, 00:25
Erick T. Barkhuis:
>Rene Pijlman:
>> Erick T. Barkhuis:
>> >Rene Pijlman:
>> >> [...wil decimale tijdsindeling...]
>
>> >Vraagje: wat gebeurt er met al die atletiek-records als jouw hartewens in
>> >vervulling gaat? Converteren of vergeten?
>>
>> De lengte van een meter wordt zodanig aangepast dat de records geldig
>> blijven.
>
>Ik was er al bang voor dat de ver- en hoogspringers, alsmede de
>speervangers en discushappers de klos zouden worden...

De golfers en sjeudeboelers zullen daarentegen zeer tevreden zijn.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

John Bokma
23/08/04, 00:45
Rene Pijlman <reply.in.the.newsgroup@my.address.is.invalid> wrote in
news:1n5ii05p7dbb1935cp917kc5ahkf1l1efi@4ax.com:

> Jelle Sjollema:
>>jelle (heeft gewoon een hekel aan tijd- en datumfuncties)
>
> Me too. In applicaties, database drivers e.d. die datum/tijd-formaten
> moeten converteren en manipuleren is dit vaak goed voor 25% van de
> bugs. Wat een narigheid.
>
> Het wordt tijd voor een wereldregering, die de wereld indeelt in 10
> tijdzones, het jaar in 10 maanden, de maand in 10 dagen, de dag in 10
> uur, het uur in 10 minuten (dit alles in één verplichte universele
> decimale notatie) ... en... DE ZOMERTIJD AFSCHAFT!

:-D. En geen schrikkeldingen :-D

--
John Voorbeeldscripts in Perl:http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html

Rene Pijlman
23/08/04, 01:35
John Bokma:
>Rene Pijlman:
> ... en... DE ZOMERTIJD AFSCHAFT!
>
>:-D. En geen schrikkeldingen :-D

En al helemaal geen historisch correcte dateringen van gebeurtenissen op
Romeinse, Joodse, Islamitische en weet-ik-wat voor kalenders die soms
halve eeuwen oversloegen.

En niet moeilijk doen over jaren voordat de aarde zijn rondjes rond de zon
begon te draaien. We tellen gewoon trillingsperioden van een emissielijn
van het Cesium-133 atoom vanaf de Big Bang, ook al waren er bij de Big
Bang nog geen Cesium-atomen.

--
René Pijlman

Wat wil jij leren? http://www.leren.nl

Jelle Sjollema
23/08/04, 09:55
"Rene Pijlman"

> >:-D. En geen schrikkeldingen :-D
>
> En al helemaal geen historisch correcte dateringen van gebeurtenissen op
> Romeinse, Joodse, Islamitische en weet-ik-wat voor kalenders die soms
> halve eeuwen oversloegen.

Dat zou ik wel een verlies vinden, want ik vind het wel heel leuk om die
lessen te geven. Met name het gedeelte dat Julius Cesar een maand naar zich
vernoemd heeft met 31 dagen, wat vreemd genoeg geen Cesari maar Juli moest
heten en dat de hem opvolgende keizer Julius Augustus ook een maand met 31
dagen naar zich vernoemd wilde hebben (volgend op Juli natuurlijk) en deze
dag wederrechtelijk zichzelf in zijn eigen maand toei-eigende ten koste van
de locale en verder onbekende godheid Februaris, die toendertijd al de
laatste maand van het jaar toebedeeld had gekregen. Kortom, dat onze huidige
gregoriaanse kalender eigenlijk het resultaat van een Romeinse en
middeleeuwse soap is.

jelle (of het allemaal zo gebeurd is blijft de vraag, maar het is in ieder
geval een leuk verhaal)

Michiel de Roo
23/08/04, 12:55
robert wrote:
> Branko Collin <collin@xs4all.nl>:
> > "Jelle Sjollema" <jelles@spambl_xs4all.nl>, you wrote on Sun, 22 Aug
> > 2004 13:23:35 +0200:
> >
> >>Kan iemand mij helpen met een datumfunctie onder PHP. Ik heb een
> >>weeknummer en wil vervolgens weten wat de datum (of direct de timestamp)
> >>is van de eerste maandag in die week? Bij voorbaat dank.
> >
> > Het lijkt me dat je eerst moet uitvinden wanneer de eerste week van het
> > jaar was. Als je dat weet, kun je de timestamp opvragen van de nulde
> > seconde van de eerste dag van die week, en daar
> >
> > ((weeknummer - 1) × seconden per week)
> >
> > bij optellen. Dan heb je de timestamp van de maandag van de week die je
> > zoekt.
>
> En dan maar hopen dat je geen problemen gaat krijgen met schrikkeljaren en
> zomer- of wintertijd...
>

Welke week heeft er een schrikkeldag dan ?

robert
23/08/04, 14:15
Michiel de Roo <yourlove@welovespam.nl>:
> robert wrote:
>
>> En dan maar hopen dat je geen problemen gaat krijgen met schrikkeljaren
>> en zomer- of wintertijd...
>
> Welke week heeft er een schrikkeldag dan ?

Erhm... ;)

--
robert

Rutger
23/08/04, 17:15
John Bokma wrote:

> :-D. En geen schrikkeldingen :-D

Ik vrees dat we dan de aarde dusdanig moeten versnellen / vertragen qua
het rondje rond de zon dat het in een handig mooi rond aantal dagen kan
(360 zou al helpen).

Dit zou toch niet te veel gevraagd zijn? ;)

groet,
rutger

Onno
23/08/04, 17:15
> jelle (gaat nu hetzelfde voor de laatste vrijdag van de maand bedenken)

Als je nu een leuke webhost hebt die php calendaring ondersteunt moet je
eens zoeken op php.net naar weekday (staat nog prefix voor), dat is
eigenlijk wat je zoekt denk ik?

John Bokma
23/08/04, 19:05
Rutger <rarwes@yahoo.com> wrote in news:10ik21r97du2l99@corp.supernews.com:

> John Bokma wrote:
>
>> :-D. En geen schrikkeldingen :-D
>
> Ik vrees dat we dan de aarde dusdanig moeten versnellen / vertragen qua
> het rondje rond de zon dat het in een handig mooi rond aantal dagen kan
> (360 zou al helpen).
>
> Dit zou toch niet te veel gevraagd zijn? ;)

Ik dacht dat "ze" daar al mee bezig waren :-D

--
John Voorbeeldscripts in Perl:http://johnbokma.com/perl/
Website design: http://johnbokma.com/websitedesign/
Ervaren Perl / Java programmeur beschikbaar: http://castleamber.com/
Tevreden opdrachtgevers: http://castleamber.com/testimonials.html