• User

    Differenza tra due date in anni mesi e giorni

    Buon giorno a tutti, volevo chiedere se qualcuno potrebbe aiutarmi nella scomposizione della differenza tra due date in un capo che mi ritorna anni mesi e giorni. Vi faccio un esempio: data_assunzione - oggi = il dipendente ad oggi ha 20 anni 10 mesi 4 giorni di servizio.
    E' possibile con php? Io per il momento sono riuscito a farlo con access ma con php non ne ho la più pallida idea.
    Grazie a tutti
    Loris3000


  • User

    a me viene in mente solo uan soluzione di queste non so se sia precisa al massimo cmq e un buon inizio penso 🙂
    [php]
    <?php
    // la data da cui effettuare il controllo e in formato giorno/mese/anno
    list($giorno, $mese, $anno) = explode("/","2/10/2007");
    // calcolo la differenza tra il timestamp della data definita e la data attuale
    // il risultato dovrò dividerlo per 86400 (il numero di secondi in un giorno)
    // e arrotondarlo con floor
    $giorni = ((time()-mktime (0,0,0,$mese,$giorno,$anno))/86400);
    $anni = floor($giorni/360);
    $mesi = floor(($giorni/30)%12);
    $giorno =floor($giorni%30);
    echo "$anni anni $mesi mesi $giorno giorni";
    ?>
    [/php]
    nello script ho messo una data di un mese indietro purtroppo cosi calcola i mesi tutti composti da 30 giorni non so come ovviare questo problema 😞 spero di esserti stato utile comunque :ciauz:


  • User

    grazie mille, adesso mi metto all'opera e vediamo se funziona.
    a presto


  • User

    Ragazzi ho risolto: ho trovato uno script in rete che fa al caso mio. Ve lo posto così ognuno può adattarlo alle sue esigenze:
    [PHP]
    <?php
    // This is a simple script to calculate the difference between two dates
    // and express it in years, months and days
    //
    // use as in: "my daughter is 4 years, 2 month and 17 days old" ... 🙂
    //
    // Feel free to use this script for whatever you want
    //
    // version 0.1 / 2002-10-3
    //
    // please send comments and feedback to [EMAIL="[email protected]"][email protected][/EMAIL]
    //
    // ****************************************************************************
    // configure the base date here
    $base_day = 11; // no leading "0"
    $base_mon = 5; // no leading "0"
    $base_yr = 2001; // use 4 digit years!
    // get the current date (today) -- change this if you need a fixed date
    $current_day = date ("j");
    $current_mon = date ("n");
    $current_yr = date ("Y");
    // and now .... calculate the difference! 🙂
    // overflow is always caused by max days of $base_mon
    // so we need to know how many days $base_mon had
    $base_mon_max = date ("t",mktime (0,0,0,$base_mon,$base_day,$base_yr));
    // days left till the end of that month
    $base_day_diff = $base_mon_max - $base_day;
    // month left till end of that year
    // substract one to handle overflow correctly
    $base_mon_diff = 12 - $base_mon - 1;
    // start on jan 1st of the next year
    $start_day = 1;
    $start_mon = 1;
    $start_yr = $base_yr + 1;
    // difference to that 1st of jan
    $day_diff = ($current_day - $start_day) + 1; // add today
    $mon_diff = ($current_mon - $start_mon) + 1; // add current month
    $yr_diff = ($current_yr - $start_yr);
    // and add the rest of $base_yr
    $day_diff = $day_diff + $base_day_diff;
    $mon_diff = $mon_diff + $base_mon_diff;
    // handle overflow of days
    if ($day_diff >= $base_mon_max)
    {
    $day_diff = $day_diff - $base_mon_max;
    $mon_diff = $mon_diff + 1;
    }
    // handle overflow of years
    if ($mon_diff >= 12)
    {
    $mon_diff = $mon_diff - 12;
    $yr_diff = $yr_diff + 1;
    }
    // the results are here:
    //$yr_diff --> the years between the two dates
    // $mon_diff --> the month between the two dates
    // $day_diff --> the days between the two dates
    // ****************************************************************************
    // simple output of the results
    print "La differenza tra <b>".$base_yr."-".$base_mon."-".$base_day."</b> ";
    print "e <b>".$current_yr."-".$current_mon."-".$current_day."</b> è di:";
    print "<br><br>";
    // this is just to make it look nicer
    $years = "anni";
    $days = "giorni";
    if ($yr_diff == "1") $years = "anno";
    if ($day_diff == "1") $days = "giorno";
    // here we go
    print $yr_diff." ".$years.", ";
    print $mon_diff." mesi e ";
    print $day_diff." ".$days;
    ?>
    [/PHP]