Hey allemaal, ik heb een script om de datum van de week, begin en eind datum te halen met het weeknummer. Alleen nu is het nieuwe jaar begonnen en is alles 1 dag opgeschoven. Kan iemand mij helpen ik zie de fout niet.

Het script:
<?
function DatumVanWeek($iWeek, $iYear)
{
// Get a random monday in the requested year
$iMonday = mktime(0, 0, 0, 3, 1, $iYear);
$iMonday = mktime(0, 0, 0, 3, 1-(date('w', $iMonday)-1), $iYear);
// Get the date of week 1
$iFirstWeek = mktime(0, 0, 0, 3, -7*(date('W', $iMonday)-1), $iYear);

$date = mktime(0, 0, 0, date('m', $iFirstWeek), date('d', $iFirstWeek) + 7*($iWeek-1), date('Y', $iFirstWeek));

$dag = date("d", $date) + 6;
$laatste = mktime(0,0,0,date("m", $date),$dag,date('Y'));

echo tijden($date, 'wedstrijden') . " - " . tijden($laatste, 'wedstrijden');
}
?>
Hahaha, er was een leerling afwezig. Test deze nog ff als je wilt, SanThe :-)

<?php
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
while ($week1 != '01') {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . ($weeknr - 1) . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01' && $weeknr > 52) {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}
?>
Week 1 doet het weer maar de week 53 fout is weer terug. Om het te bekijken zie bovenstaande link.
Wat is de fout dan nu nog? Ik zie geen fouten in het script, week 1 pakt hij toch?
Het script van Jan geeft soms nog een verkeerd antwoord op week 53 die niet altijd bestaat.
Week 53 bestaat toch nooit, hij geeft als week 52 deels in het nieuwe jaar loopt het toch goed terug?
Ja hoor. Heel simpel. Een jaar heeft 52 weken van 7 dagen en dat is dus totaal 364 dagen. En zoals je weet heeft een jaar 365 dagen en eens in de vier jaar zelfs 366. Dus af en toe is er een week 53.

Edit: Typo
Jan Koehoorn schreef op 09.01.2006 21:11
Heel gek. In mijn testopstelling krijg ik dezelfde uitkomsten als met jullie functie.

Post je 'niet gewijzigde' maar 'toch werkende' script eens dan zet ik het even op mijn site. :-)
Ik heb gemerkt dat ie vaak wel correct is maar niet altijd.
Dit was mijn laatste versie. Ik ga nu even aan mijn CSS tutorial werken. Spreek je misschien straks nog.

<?php
function ISOdates_from_weeknr ($weeknr, $year, $format = '%d-%m-%Y') {
$start = strtotime ('1 january ' . $year);
$week1 = strftime ('%V', $start);
while ($week1 != '01') {
$start += (7 * 24 * 3600);
$week1 = strftime ('%V', $start);
}
$timestamp_week = strtotime ('+' . ($weeknr - 1) . ' week', $start);
$check = strftime ('%V', $timestamp_week);
if ($check == '01' && $weeknr > 52) {
echo 'ongeldig weeknummer voor dit jaar' . "\n";
return false;
}
$weekdag = strftime ('%u', $timestamp_week);
$dagen_tot_begin_week = $weekdag - 1;
$dagen_tot_eind_week = 7 - $weekdag;
$begindatum = strtotime ("-" . $dagen_tot_begin_week . " days", $timestamp_week);
$einddatum = strtotime ("+" . $dagen_tot_eind_week . " days", $timestamp_week);
$begindatum;
return array (strftime ($format, $begindatum), strftime ($format, $einddatum));
}


echo '<pre>';
for ($i = 2000; $i < 2005; $i++) {
echo $i . "\n";
echo '<p>1</p>';
print_r (ISOdates_from_weeknr (1, $i));
echo '<p>53</p>';
print_r (ISOdates_from_weeknr (53, $i));
echo '<hr>';
}


echo '</pre>';
?>

Reageren