我做了这个,需要一些帮助调整它,以便它给出正确的结果
function daysDifference($end){
//$start = "2007-03-24";
//$end = "2009-06-26";
$now = date("Y-m-d");
$e = (is_string($end) ? strtotime($end) : $end);
$diff = abs($e - strtotime($now));
$years = floor($diff / (365 * 60 * 60 * 24));
$months = floor(($diff - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days = floor(($diff - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 * 24)/ (60 * 60 *24));
return ($years == 0 ? '' : ($years == 1 ? $years . ' year ' : $years . ' years ')) . ($months == 0 ? '' : ($months == 1 ? $months . ' month ' : $months . ' months ')) . ($days == 0 ? '' : ($days == 1 ? $days . ' day ' : $days . ' days '));
}
$end
正从我的数据库中提取,因此检查是否已经是字符串或日期。
$e
,但当我尝试从$now
中减去$e
时,我得到了有趣的结果
例如:
$now
今天13th
和$e
是项目的结束日期,它假设给我我需要的东西......对吗?
如果我想在12天内说出来,我会得到1年12天。
以及$e = 0000-00-00
(如果用户没有输入结束日期),我可以获得40年10个月和26天的剩余时间。
我在计算中尝试了很多不同的变化,但我一直无处可去。
答案 0 :(得分:4)
你为什么要重新发明轮子?使用date_diff:
<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%d days');
?>
答案 1 :(得分:2)
存储实际日期,而不是字符串,您只需向数据库询问差异。
SELECT DATEDIFF(CURRENT_DATE, end) FROM table
如果您只是将事物除以365,则无法获得准确的结果。并非每年都有365天。