php $ev $hetszama 'hetfo' -> YYYY-MM-DD hogyan?

Adott 3 ertek, ev,hetszama,hetfo ebbol kellene keszitenem datumot.
En teljesen elakadtam, reggel ota nyomom a manult, valszeg elrontok valamit, mert sehogy sem jon ossze.
Remelem tudtok segiteni.

Hozzászólások

Ha jól tévedek:
date('Y m d', mktime( 0, 0, 0, 0, 52*7, 2000))

Pontosan mit is akarsz csinalni? kicsit zavaros.
Adott év adott hetének hétfői napját akarod dátumban megszerezni?

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

// **************************************
$evszam = "2006";
$hetszam = "1";
$nap = "hetfo";
// **************************************

$realhet = $hetszam -1;
$eveleje = strtotime("$evszam-01-01");
$nap_array = array("","hetfo","kedd","szerda","csutortok","pentek","szombat","vasarnap");
$nap_szam = array_search($nap,$nap_array);
$timestring = "+$realhet week +$nap_szam day";
$unixido = strtotime("$timestring","$eveleje");

echo date('Y-m-d',$unixido);

Coding for fun. ;)

Szerintem az eddigi megoldások nem jók, mert azt tételezik fel, hogy az év első hete YYYY-01-01-el kezdődik. Kipróbáltam pl. 1988-al és teljesen hibás eredményeket adott.

Az ISO 8601 pontosan definiálja az első hetet (http://en.wikipedia.org/wiki/ISO_week_date), és a PHP is ezt használja.

function week ($ev, $het)
{
    for ($n = 1; $n < 7; $n++)
    {
        $timestamp = strtotime ("$ev-1-$n");
        if (date ("w", $timestamp) !== "1") $timestamp -= (date ("w", $timestamp)-1)*86400;
        if (date ("W", $timestamp) === "01") break;
    }

    return $timestamp+604800*($het-1);
}

print date ("Y. m. d. - l, W.", week (1988, 1))." hét\n";
print date ("Y. m. d. - l, W.", week (1988, 9))." hét\n";
print date ("Y. m. d. - l, W.", week (2006, 26))." hét\n";
print date ("Y. m. d. - l, W.", week (1997, 1))." hét\n";

Eredmények:

1988. 01. 04. - Monday, 01. hét
1988. 02. 29. - Monday, 09. hét // szökőév volt
2006. 06. 26. - Monday, 26. hét
1996. 12. 30. - Monday, 01. hét // igen, 1997 első hetének hétfője 96-ra esik :)

Direkt ellenőriztem mindent amit kipróbáltam és mindegyik jó volt. De ez az ISO szerinti számítás. Vannak más "szabványok" is, amiknél pl az első hét az első hétfővel kezdődik (vagy pl usaban eleve vasarnappal kezdődik a hét, ott is valami mas rendszer van). Más rendszerben 1997 első hete 1997. január hattal vagy öttel kezdődik.

Esetleg ha nem lenne kézenfekvő, akkor az ISO rendszernél van 53. hét is.

Igazából nem tudom, hogy nálunk mi a hivatalos, de úgy tudom az üzleti életben mindenhol az isot használják. Van valami halvány emlékem, mintha már láttam volna legolcsóbb lapozgatós naptárban 53. hetet és azt is, hogy az első hét nem hétfővel kezdődött.