Se ho due variabili $startDate="YYYYmmdd"
e $endDate="YYYYmmdd"
, come posso ottenere il numero di giorni tra di loro per favore?PHP get giorni tra data di inizio e data di fine
Grazie.
Se ho due variabili $startDate="YYYYmmdd"
e $endDate="YYYYmmdd"
, come posso ottenere il numero di giorni tra di loro per favore?PHP get giorni tra data di inizio e data di fine
Grazie.
Se si utilizza PHP 5.3, è possibile utilizzare la nuova DateTime
classe:
$startDate = new DateTime("20101013");
$endDate = new DateTime("20101225");
$interval = $startDate->diff($endDate);
echo $interval->days . " until Christmas"; // echos 73 days until Christmas
In caso contrario, sarà necessario utilizzare strtotime
:
$startDate = strtotime("20101013");
$endDate = strtotime("20101225");
$interval = $endDate - $startDate;
$days = floor($interval/(60 * 60 * 24));
echo $days . " until Christmas"; // echos 73 days until Christmas
Le nuove classi DateTime, DateTimeInterval, DateTimePeriod e DateTimeZone sono semplicemente rock. Ho anche fatto esperienza con loro. Penso che sia meglio di uno strtotime, perché considera i leap-years, i leap-seconts, ecc. Quindi +1 per te. Ho anche fornito un esempio più dettagliato in questo post: http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php/3108800#3108800 –
Grazie, lonesomeday. – Francisc
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30");
echo date('z', $DayDiff)." Days";
questo dovrebbe essere preciso e utilizzabile con PHP < 5.2
Ecco il codice di esempio
$startDate = mktime(0,0,0,1,1,2010);
$endDate = mktime(0,0,0,12,1,2010);
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
echo "Differernce is $fullDays days";
<?php
$time1=strtotime($startDate);
$time2=strtotime($endDate);
$daycount=floor(($time2-$time1)/ 86400);
?>
<?php
function days($date1, $date2) {
$date1 = strtotime($date1);
$date2 = strtotime($date2);
return ($date2 - $date1)/(24 * 60 * 60);
}
$date1 = '20100820';
$date2 = '20100930';
echo days($date1, $date2);
?>
Il modo più semplice che ho trovato per ottenere il numero di giorni tra loro è convertendo la date di inizio e di fine di timestamp Unix e facendo un Sottrai su di loro.
Quindi se si desidera formattare la data, riconvertirla con la funzione data di PHP.
Ecco il mio approccio, basato su una ricerca brutale nella maggior parte dei casi, solo perché le divisioni per secondi (per settimane, mesi, anni) potrebbero non restituire risultati precisi, come ad esempio quando si lavora con anni bisestili.
<?php
function datediff($timeformat, $startdate, $enddate)
{
$unix_startdate = strtotime($startdate) ;
$unix_enddate = strtotime($enddate) ;
$min_date = min($unix_startdate, $unix_enddate);
$max_date = max($unix_startdate, $unix_enddate);
$Sd = date("d", $unix_startdate) ;
$Sm = date("m", $unix_startdate) ;
$Sy = date("Y", $unix_startdate) ;
$Ed = date("d", $unix_enddate) ;
$Em = date("m", $unix_enddate) ;
$Ey = date("Y", $unix_enddate) ;
$unixtimediff = $unix_enddate - $unix_startdate ;
if ($unixtimediff <= 0) return -1 ;
switch(strtolower($timeformat))
{
case "d": // days
$divisor = 3600 * 24 ;
return floor($unixtimediff/$divisor) + 1 ;
break ;
case "w": // weeks
$i = 0 ;
while (($min_date = strtotime("+1 DAY", $min_date)) <= $max_date) $i++;
return floor($i/7) ;
break ;
case "m": // months
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++;
return $i ;
break ;
case "q": // quaterly (3 months)
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+3 MONTH", $min_date)) <= $max_date) $i++;
return $i ;
break ;
case "y": // year
$i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++;
return floor($i/12) ;
break ;
}
}
$startdate = "2014-01-01" ;
$enddate = "2015-12-31" ;
$formats = array("d" => "days", "w" => "weeks", "m" => "months", "q" => "quaterly", "y" => "years") ;
foreach($formats AS $K => $F)
echo "From $startdate to $enddate in $F format: ". datediff("$K", $startdate, $enddate)."<br>" ;
?>
si prega di indicare se si desidera che il numero di giorni inclusivi o esclusivi delle due date. – stillstanding
Compreso l'inizio e la fine, grazie. – Francisc