[PHP] week naar datum converteren

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heeft iemand al een conversie-functie geschreven van weeknummer naar datum?

Bijvoorbeeld:
/***
string week2date(int week)
***/

En als je dan week2date(36) aanroept, krijg je als resultaat '4 september 2000' of '4 september t/m 10 september 2000' of zoiets dergelijks.

Ik heb wel de volgende link gevonden:
http://www.sasconsig.com/tip00063.htm

Acties:
  • 0 Henk 'm!

Verwijderd

Goeiedag,
Er staan een paar oplossingen bij de User Contributed Notes van de functie date van php, te vinden op:
http://www.php.net/manual/function.date.php

groeten,

Mark.

Acties:
  • 0 Henk 'm!

  • WAcKiN
  • Registratie: November 1999
  • Laatst online: 28-08-2023
Ah hmm, ik verveelde me en heb een functie in elkaar geflanst, kan misschien beter maar dit werkt in elk geval.

<?php

function week2date($week,$jaar)
{
$week--; // Anders is week 1 eigenlijk week 2 (begint bij 0)
$week_seconden = 604800; // aantal seconden in een week

// aantal weken maal aantal seconden in 1 week bij begin van het jaar opgeteld
$week_begin = mktime(0,0,0,1,1,$jaar)+($week*$week_seconden);
$week_eind = $week_begin + $week_seconden;

// en nu gewoon naar gewenste datum omzetten
$week_begin_txt = date("jS F",$week_begin); // bijv "4th January"
$week_eind_txt = date("jS F",$week_eind);

return "$week_begin_txt t/m $week_eind_txt $jaar";
}

print week2date(1,2000); // prints '1st January t/m 8th January 2000' (bij mij althans ;)

?>

Werkt als het goed is met schrikkeljaren en al die crap. Het is inderdaad engels, je kan de 'locale' settings veranderen met setlocale() en strftime(), mits de server het ondersteunt. Kijk maar in de manual voor het gebruik van die functies, ik heb er niet naar gekeken maar volgens mij hoef je die maar 1x bovenaan je script uit te voeren.

Hope this helps :]

P.S. Hmm, preview functie werkt niet echt of de code ubb tags niet?

Acties:
  • 0 Henk 'm!

  • WAcKiN
  • Registratie: November 1999
  • Laatst online: 28-08-2023
ROFL, 8 dagen in 1 week :)

Je moet het zien als 'tot' ipv 'tot en met'. Wil je het als 'tot en met' zien (1 t/m 7) dan moet je van $week_seconden = 604799 maken ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Stoer! :) Het werkt nog ook zeg... nu inderdaad alleen nog ff kijken of ik het in het Nederlands kan krijgen (desnoods maanden maar als getal neerzetten ofsow). Maar ik ben in elk geval erg geholpen!

Edited:
Ik heb nu in plaats van date("jS F",$week_ gewoon maar date("d-m",$week_ gebruikt...

Maar volgens mij klopt het nog niet helemaal... Ik krijg nu van zaterdag tot en met zaterdag te zien... Naja, morgen is er weer een dag! :)

Acties:
  • 0 Henk 'm!

  • WAcKiN
  • Registratie: November 1999
  • Laatst online: 28-08-2023
Erm, ja, hij begint bij de 1ste van het jaar, nu je het zegt klopt het idd niet :]

ff nadenken....

Verwijderd

Topicstarter
Omdat ik het toch alleen maar nodig heb van week 33 in 2000 tot hooguit week 32 in 2001, kon ik het als volgt omschrijven:

<?
function week2date($week)
{
$week--; // Anders is week 1 eigenlijk week 2 (begint bij 0)
$week_seconden = 604800; // aantal seconden in een week

// aantal weken maal aantal seconden in 1 week bij begin van het jaar opgeteld
if ($week > 32) {
$week_begin = mktime(0,0,0,1,3,2000)+($week*$week_seconden); // Week 1 in 2000 begint op 3 januari
} else {
$week_begin = mktime(0,0,0,1,1,2001)+($week*$week_seconden); // Week 1 in 2001 begint op 1 januari
}

$week_eind = $week_begin + 518400; // aantal seconden in 6 dagen

// en nu gewoon naar gewenste datum omzetten
$week_begin_txt = date("d-m",$week_begin); // bijv "03-01"
$week_eind_txt = date("d-m",$week_eind);

return "$week_begin_txt t/m $week_eind_txt";
}
?>

Acties:
  • 0 Henk 'm!

  • commeric
  • Registratie: November 2002
  • Laatst online: 14-08 22:32
beetje oud topic, maar dit is de code dat hij 100% werkt. (voor de mensen die hem met de search vinden)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function week2date($week,$jaar)
{
$week--; // Anders is week 1 eigenlijk week 2 (begint bij 0)
$week_seconden = 604799; // aantal seconden in een week

// aantal weken maal aantal seconden in 1 week bij begin van het jaar opgeteld
$offset = date("w", mktime(0,0,0,1,1,$jaar)) * 60*60 * 24; // zondag als eerste dag nemen en niet bijv in 2003 woensdag
$week_begin = mktime(0,0,0,1,1,$jaar)+($week*$week_seconden) -$offset;
$week_eind = $week_begin + $week_seconden;

// en nu gewoon naar gewenste datum omzetten
$week_begin_txt = date("jS F",$week_begin); // bijv "4th January"
$week_eind_txt = date("jS F",$week_eind);

return "$week_begin_txt tot $week_eind_txt $jaar";
}

[ Voor 14% gewijzigd door commeric op 21-04-2003 17:37 ]

Pagina: 1