Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: ikälaskuri?

Sivun loppuun

Blacklion [05.02.2005 11:04:39]

#

Onko kellään semmosta ikälaskuria, eli siinä se laskis sun iän esim. näin: 18 vuotta, 4 kuukautta 28 päivää, tolleen oli yhdellä sivulla mutta kun kysäisin ylläpidolta niin hän sanoin ettei vaivaudu etsimään sitä skriptiä niin ajattelin kysäistä täältä. Mielummin haluaisin itse koodin, mutta jos on oppaita niin miks ei

tuomas [05.02.2005 11:27:15]

#

Lue vaikka nuo php-oppaat joita täältä löytyy.

Antti Laaksonen [05.02.2005 13:10:26]

#

Iän voi laskea samalla tavalla, kuin sen tekisi käsinkin. Eli ensin lasketaan vuodet, sitten kuukaudet ja lopuksi päivät. Jos loppukuukausi on alkukuukautta pienempi, vuosia onkin yksi vähemmän. Ja jos loppukuukaudenpäivä on alkukuukaudenpäivää pienempi, kuukausien määrä on yhden pienempi. Skriptin tekoa vaikeuttavat jonkun verran kuukausien muuttuva päivienmäärä sekä karkausvuodet.

Tekaisin nopeasti tämmöisen esimerkin, joka tuntui toimivan ainakin kokeilemillani päivillä.

<?php

// 4.11.1990
$alku = mktime(0, 0, 0, 11, 4, 1990);
// tämänhetkinen aika
$loppu = time();

$vuodet = date("Y", $loppu) - date("Y", $alku);

if (date("m", $loppu) < date("m", $alku)) {
    $vuodet--;
    $kuukaudet = 12 - (date("m", $alku) - date("m", $loppu));
} else {
    $kuukaudet = date("m", $loppu) - date("m", $alku);
}

if (date("d", $loppu) < date("d", $alku)) {
    $kuukaudet--;
    if ($kuukaudet == 4 || $kuukaudet == 6 || $kuukaudet == 9 || $kuukaudet == 11) {
        $päivät = 30 - (date("d", $alku) - date("d", $loppu));
    } elseif ($kuukaudet == 2) {
        if ($vuodet % 4 == 0 && ($vuodet % 100 != 0 || $vuodet % 400 == 0)) {
            $päivät = 29 - (date("d", $alku) - date("d", $loppu));
        } else {
            $päivät = 28 - (date("d", $alku) - date("d", $loppu));
        }
    } else {
        $päivät = 31 - (date("d", $alku) - date("d", $loppu));
    }
} else {
    $päivät = date("d", $loppu) - date("d", $alku);
}

echo "$vuodet vuotta, $kuukaudet kuukautta, $päivät päivää";

?>

Blacklion [05.02.2005 18:42:18]

#

Kiitos Antti toi toimii :)

Mutta tota vaihtuuko toi kun vaikka mulle tulee nyt näin:
13 vuotta, 6 kuukautta, 4 päivää
niin vaihtuuko toi huomenna automaattisesti tällaseks:
13 vuotta, 6 kuukautta, 5 päivää ??

esakom [05.02.2005 18:50:57]

#

eiköhän se vaihdu. Voit testata vaikka asettelemalla windowsin kelloa...

Antti Laaksonen [05.02.2005 19:06:56]

#

Vaihtuuhan se, koska lopetusaika tulee suoraan time-funktiosta. :)

Olga [06.02.2005 19:21:46]

#

Noinhan tuo käy kätevästi, mutta koodia voi lyhentää huomattavastikin käyttämällä enemmän hyväksi date-funktion tarjoamia palveluita... esim. t-parametrilla saadaan kuukauden päivien lukumäärä selville ja L-parametrin avulla taasen saadaan selville, onko kyseessä karkausvuosi vai ei.

Antti Laaksonen [06.02.2005 19:41:39]

#

Hyvä huomautus, date-funktio on monipuolisempi kuin muistin. Tosin tuon koodin pystyy helpommin kääntämään myös muille kielille, joissa ei vastaavia ylellisyyksiä ole.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta