- Home
- Categorie
- Coding e Sistemistica
- PHP
- Differenza tra due date in anni mesi e giorni
-
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
-
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
-
grazie mille, adesso mi metto all'opera e vediamo se funziona.
a presto
-
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]