Wenn ich zwei Variablen habe $startDate="YYYYmmdd"
und $endDate="YYYYmmdd"
, wie kann ich die Anzahl der Tage zwischen ihnen bitte bekommen?PHP bekomme Tage zwischen Start-Datum und Enddatum
Vielen Dank.
Wenn ich zwei Variablen habe $startDate="YYYYmmdd"
und $endDate="YYYYmmdd"
, wie kann ich die Anzahl der Tage zwischen ihnen bitte bekommen?PHP bekomme Tage zwischen Start-Datum und Enddatum
Vielen Dank.
Wenn Sie PHP 5.3 verwenden, können Sie die neue DateTime
-Klasse verwenden:
$startDate = new DateTime("20101013");
$endDate = new DateTime("20101225");
$interval = $startDate->diff($endDate);
echo $interval->days . " until Christmas"; // echos 73 days until Christmas
Wenn nicht, müssen Sie strtotime
verwenden:
$startDate = strtotime("20101013");
$endDate = strtotime("20101225");
$interval = $endDate - $startDate;
$days = floor($interval/(60 * 60 * 24));
echo $days . " until Christmas"; // echos 73 days until Christmas
Die neuen DateTime-, DateTimeInterval-, DateTimePeriod- und DateTimeZone-Klassen rocken einfach. Ich habe auch etwas Erfahrung mit ihnen gemacht. Ich denke, es ist besser als strtotime, weil es Schaltjahre, Sprungbeile usw. berücksichtigt. Also +1 für Sie. Ich gab auch ein ausführlicheres Beispiel in diesem Beitrag: http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php/3108800#3108800 –
Danke, lonesomeday. – Francisc
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30");
echo date('z', $DayDiff)." Days";
dies sollte man mit PHP < 5.2
Hier präzise und verwendbar sein, ist der Beispielcode
$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);
?>
Der einfachste Weg, den ich gefunden habe, die Anzahl der Tage zwischen ihnen zu bekommen, ist durch die Start- und Enddaten zu Unix-Zeitstempel konvertieren und auf sie eine subtrahieren tun.
Wenn Sie das Datum dann formatieren möchten, konvertieren Sie es mit der PHP-Datumsfunktion zurück.
Hier ist meine Herangehensweise, basierend auf einer brutalen Suche in den meisten Fällen, nur weil Divisionen in Sekunden (für Wochen, Monate, Jahre) keine präzisen Ergebnisse liefern, wie zum Beispiel bei Schaltjahren.
<?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>" ;
?>
bitte an, ob Sie Anzahl der Tage der beiden Termine inklusive oder exklusive wollen. – stillstanding
Einschließlich Anfang und Ende, danke. – Francisc