Måske sådan her:
function Mandag($week, $year='')
{
if (empty($year))
$year = date('Y');
$y = mktime(0,0,0,1,1,$year);
$yw = (($week-1)*604800)+$y;
$dw = ((date('w', $yw))-1)*86400;
$m = $yw-$dw;
if (date('w',$y)>4)
{
$dmy = date ('d/m-Y', $m+604800);
} else {
$dmy = date ('d/m-Y', $m);
}
return $dmy;
}
//Uge 21 i år
echo Mandag(21);
//Uge 3 i år 2003
echo Mandag(3, 2003);
Hmm. Jeg har et timestamp som tidsenhed. Har prøvet lidt med noget ala:
$now = (date('w', $now) < 1 ? (date('w', $now) == 1 ? $now : $now - (86400 * 6)) : $now - (86400 * (date('w', $now) - 1)));
Er der nogen som kan bekræfte at det holder 100% eller har andre forslag eller optimeringer?
Mit forsøg er at undersøge hvilken dag det er og så trække det rigtig antal sekunder fra, som svare til at det bliver mandag.
Funktionen mktime kan udregne datoen for dig. Og når du er igang, kan du lige så godt lave en funktion, der kan beregne datoen for en hvilken som helst ugedag.
Eksempel:
function getMonday($timestamp = 0) {
// Returnerer et timestamp for mandag i den uge, som indeholder $timestamp
// Hvis $timestamp er tom, anvendes dags dato
if (!$timestamp) $timestamp = mktime();
$daysSinceSunday = date('w', $timestamp);
if ($daysSinceSunday == 0) $daysSinceSunday = 7;
$lastSunday = mktime(0, 0, 0, date('n', $timestamp), date('j', $timestamp) - $daysSinceSunday, date('Y', $timestamp));
return mktime(0, 0, 0, date('n', $lastSunday), date('j', $lastSunday) +1, date('Y', $lastSunday));
}
function getWeekDayDate($dayOfWeek, $timestamp = 0) {
// Returnerer et timestamp for $dayOfWeek i den uge, som indeholder $timestamp
// $dayOfWeek = 1 for mandag, 2 for tirsdag .. 7 for søndag
// Hvis $timestamp er tom, anvendes dags dato
if (!$timestamp) $timestamp = mktime();
$daysSinceSunday = date('w', $timestamp);
if ($daysSinceSunday == 0) $daysSinceSunday = 7;
$lastSunday = mktime(0, 0, 0, date('n', $timestamp), date('j', $timestamp) - $daysSinceSunday, date('Y', $timestamp));
return mktime(0, 0, 0, date('n', $lastSunday), date('j', $lastSunday) + $dayOfWeek, date('Y', $lastSunday));
}
$day = 5;
$month = 6;
$year = 2005;
$someDate = mktime(0, 0, 0, $month, $day, $year);
echo 'Mandag ' . date('d.m.Y', getMonday($someDate)) . '<br>';
echo 'Onsdag samme uge: ' . date('d.m.Y', getWeekDayDate(3, $someDate)) . '<br>';
echo 'Onsdag denne uge: ' . date('d.m.Y', getWeekDayDate(3));