2016-01-04 132 views
1

我正在尝试编写一个可以计算两个日期之间的天数的函数。目前,我有以下,但它给我一些意想不到的结果:PHP - 计算两个日期之间的天数

function dayCount($from, $to) { 
    $first_date = strtotime($from); 
    $second_date = strtotime($to); 
    $offset = $second_date-$first_date; 
    return floor($offset/60/60/24); 
} 

print dayCount($s, $e).' Days'; 

一对夫妇的正确例子:

$s = '18-03-2016'; 
$e = '25-03-2016'; 

输出:7 Days - 正确

$s = '03-02-2016'; 
$e = '06-02-2016'; 

输出: 3 Days - 正确

$s = '06-04-2016'; 
$e = '27-04-2016'; 

输出:21 Days - 正确

但是,当我有一个跨越2个月之间的日期有时它是正确的,有时它显示了一天的时间:

$s = '25-03-2016'; 
$e = '01-04-2016'; 

输出:6 Days - 应该是7天

$s = '23-02-2016'; 
$e = '01-03-2016'; 

输出:7 Days - 正确

+4

为什么不使用'date_diff' PHP函数? – Thamilan

+0

重复的http://stackoverflow.com/questions/33732686/find-amount-of-days-between-2-dates-in-php/33732864#33732864 –

+0

这不是“2个月之间的交叉”,这是造成问题。问题是'27-03-2016'之前或之后以及'28-03-2016'之后或之后的时间间隔。 2016年3月27日是夏令时(在欧盟)的开始。在计算两个时间戳之间的差值时,从具有不同时区偏移量的字符串中...在观察DST的时区中,2016年3月27日只有23小时。 – spencer7593

回答

7

请使用diff函数获取两天之间的日期。

$date1 = new DateTime("25-03-2016"); 
$date2 = new DateTime("01-04-2016"); 

echo $diff = $date2->diff($date1)->format("%a"); 
6

请使用date_diff功能这样

<?php 
$date1=date_create("2013-03-15"); 
$date2=date_create("2013-12-12"); 
$diff=date_diff($date1,$date2); 
echo $diff->format("%R%a days"); 
?> 

希望这可以帮助你感谢名单。

+0

加上一个用于将负数数字输入到帐户 –

2

您也可以使用这个(对于版本的PHP 5.1.5及以上不使用date_diff()):

function dayCount($from, $to) { 
    $first_date = strtotime($from); 
    $second_date = strtotime($to); 
    $days_diff = $second_date - $first_date; 
    return date('d',$days_diff); 
} 

print dayCount($s, $e).' Days'; 
+0

没有前导0返回日期('j',$ days_diff); –

相关问题