我需要提供2个日期之后的年数。这是我的代码:
function daysDifference($endDate, $beginDate)
{
$date_parts1=explode("-", $beginDate);
$date_parts2=explode("-", $endDate);
$start_date=gregoriantojd($date_parts1[1], $date_parts1[2], $date_parts1[0]);
$end_date=gregoriantojd($date_parts2[1], $date_parts2[2], $date_parts2[0]);
$diff = $end_date - $start_date;
echo $diff;
$years = floor($diff / (365.25*60*60*24));
return $years;
}
echo daysDifference('2011-03-12','2008-03-09');
$diff
给出一个数字输出。当我返回$years
时,我正在0
。我做错了什么?
答案 0 :(得分:108)
$d1 = new DateTime('2011-03-12');
$d2 = new DateTime('2008-03-09');
$diff = $d2->diff($d1);
echo $diff->y;
答案 1 :(得分:7)
在PHP 5.2框上(是的,它们仍然存在)所以没有DateTime :: diff()支持我最终使用了这个:
$dateString='10-05-1975';
$years = round((time()-strtotime($dateString))/(3600*24*365.25))
答案 2 :(得分:1)
伙计们这是一个很好的代码,我曾经使用过.....它不是我的想法......我只是从网上得到了一些......
它还有多种选择希望这有助于.........
function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
/*
$interval can be:
yyyy - Number of full years
q - Number of full quarters
m - Number of full months
y - Difference between day numbers
(eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".)
d - Number of full days
w - Number of full weekdays
ww - Number of full weeks
h - Number of full hours
n - Number of full minutes
s - Number of full seconds (default)
*/
if (!$using_timestamps) {
$datefrom = strtotime($datefrom, 0);
$dateto = strtotime($dateto, 0);
}
$difference = $dateto - $datefrom; // Difference in seconds
switch($interval) {
case 'yyyy': // Number of full years
$years_difference = floor($difference / 31536000);
if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
$years_difference--;
}
if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
$years_difference++;
}
$datediff = $years_difference;
break;
case "q": // Number of full quarters
$quarters_difference = floor($difference / 8035200);
while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
$months_difference++;
}
$quarters_difference--;
$datediff = $quarters_difference;
break;
case "m": // Number of full months
$months_difference = floor($difference / 2678400);
while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
$months_difference++;
}
$months_difference--;
$datediff = $months_difference;
break;
case 'y': // Difference between day numbers
$datediff = date("z", $dateto) - date("z", $datefrom);
break;
case "d": // Number of full days
$datediff = floor($difference / 86400);
break;
case "w": // Number of full weekdays
$days_difference = floor($difference / 86400);
$weeks_difference = floor($days_difference / 7); // Complete weeks
$first_day = date("w", $datefrom);
$days_remainder = floor($days_difference % 7);
$odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
if ($odd_days > 7) { // Sunday
$days_remainder--;
}
if ($odd_days > 6) { // Saturday
$days_remainder--;
}
$datediff = ($weeks_difference * 5) + $days_remainder;
break;
case "ww": // Number of full weeks
$datediff = floor($difference / 604800);
break;
case "h": // Number of full hours
$datediff = floor($difference / 3600);
break;
case "n": // Number of full minutes
$datediff = floor($difference / 60);
break;
default: // Number of full seconds (default)
$datediff = $difference;
break;
}
return $datediff;
}
echo datediff('yyyy','2009-01-16','2011-03-16');
答案 3 :(得分:-1)
$ start_date和$ end_date'值是天数,而不是秒数。所以你不应该将$ diff与365.25 * 60 * 60 * 24分开。
function daysDifference($endDate, $beginDate)
{
$date_parts1 = explode("-", $beginDate);
$date_parts2 = explode("-", $endDate);
$start_date = gregoriantojd($date_parts1[1], $date_parts1[2], $date_parts1[0]);
$end_date = gregoriantojd($date_parts2[1], $date_parts2[2], $date_parts2[0]);
$diff = abs($end_date - $start_date);
$years = floor($diff / 365.25);
return $years;
}
echo daysDifference('2011-03-12','2008-03-09');
答案 4 :(得分:-3)
如果您想要两个日期之间的年数,为什么不使用以下内容:
function yearsDifference($endDate, $beginDate)
{
$date_parts1=explode("-", $beginDate);
$date_parts2=explode("-", $endDate);
return $date_parts2[0] - $date_parts1[0];
}
echo yearsDifference('2011-03-12','2008-03-09');
在这种情况下,你会得到:
3