Avatar billede eikhorsholm Nybegynder
26. maj 2005 - 00:34 Der er 3 kommentarer og
1 løsning

Dato for mandag i denne uge.

Er det muligt, at få timestampet for mandagen i en given uge.
F.eks. i dag, skulle resultere i mandag d. 23/5-05.
Avatar billede hmortensen Nybegynder
26. maj 2005 - 01:35 #1
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);
Avatar billede eikhorsholm Nybegynder
26. maj 2005 - 12:15 #2
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.
Avatar billede kargo1 Nybegynder
28. maj 2005 - 14:43 #3
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));
Avatar billede eikhorsholm Nybegynder
01. juni 2005 - 22:02 #4
Hmm, lukker spørgsmålet.
Synes min egen løsning var bedst, håber det er i orden?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester