Если у меня есть две переменные $startDate="YYYYmmdd"
и $endDate="YYYYmmdd"
, как я могу получить количество дней между ними, пожалуйста?PHP получить дни между датой начала и датой
спасибо.
Если у меня есть две переменные $startDate="YYYYmmdd"
и $endDate="YYYYmmdd"
, как я могу получить количество дней между ними, пожалуйста?PHP получить дни между датой начала и датой
спасибо.
Если вы используете PHP 5.3, вы можете использовать новый DateTime
класс:
$startDate = new DateTime("20101013");
$endDate = new DateTime("20101225");
$interval = $startDate->diff($endDate);
echo $interval->days . " until Christmas"; // echos 73 days until Christmas
Если нет, вам необходимо использовать 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
Новые классы DateTime, DateTimeInterval, DateTimePeriod и DateTimeZone просто качаются. Я также немного поработал с ними. Я думаю, что это лучше, чем strtotime, потому что он рассматривает високосные годы, прыжки-секунты и т. Д. Итак, +1 для вас. Я также привел более подробный пример в этом сообщении: http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php/3108800#3108800 –
Спасибо, lonesomeday. – Francisc
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30");
echo date('z', $DayDiff)." Days";
это один должен быть точным и пригодна для работы с PHP < 5,2
Вот пример кода
$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);
?>
Самый простой способ, который я нашел, чтобы получить количество дней между ними путем преобразования даты начала и окончания, чтобы Unix меток времени и делать в них вычесть на.
Затем, если вы хотите отформатировать дату, используйте его, используя функцию даты PHP.
Вот мой подход, основанный на жестоком поиске в большинстве случаев, только потому, что деления на секунды (в течение нескольких недель, месяцев, лет) могут не возвращать точные результаты, например, при работе с високосными годами.
<?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>" ;
?>
пожалуйста, укажите, если вы хотите количество дней включительно или без учета двух дат. – stillstanding
Включая начало и конец, спасибо. – Francisc