我在php中有两个约会
$date1 = 'May 3, 2012 10:38:22 GMT'
$date2 = '06 Apr 2012 07:22:21 GMT'
然后我减去它们两个
$date2 - $date1
,并获得
Result:6
为什么结果是6而不是27? ......?我如何减去这两个日期,并根据月份差异返回给我一个结果,同时减去年份和年份。日子和日子时间?
答案 0 :(得分:58)
第1部分:为什么结果为6?
首次减去日期时,日期只是字符串。 PHP尝试将它们转换为整数。它通过转换直到第一个非数字来实现。因此,date2变为6,date1变为0。
第2部分:你如何让它发挥作用?
$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');
$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;
酌情转换。
答案 1 :(得分:12)
$date1 = new DateTime("May 3, 2012 10:38:22 GMT");
$date2 = new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->format("%d");
答案 2 :(得分:11)
有一种方法可以使用mktime n在时间戳中创建日期,然后减去然后使用日期函数以你想要的方式显示....
其他方式是以相同格式格式化两个日期然后减去....
第三种方式
$date1= new DateTime("May 3, 2012 10:38:22 GMT");
$date2= new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->("%d");
第四种方式
$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');
$secs = $datetime2 - $datetime1;// == return sec in difference
$days = $secs / 86400;
答案 3 :(得分:5)
$todate= strtotime('May 3, 2012 10:38:22 GMT');
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT');
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates
$days = floor($calculate_seconds / (24 * 60 * 60 )); // convert to days
echo($days);
此代码将找到两个日期之间的日期差异。
此处输出为27
答案 4 :(得分:5)
大多数提出的解决方案似乎都有效,但每个人都忘记了一件事:时间。
以 evan 为例:
$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');
$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;
当你不修剪时间部分时,可能会导致milscalculations。例如:2014-05-01 14:00:00
(Y-m-d)和2014-05-02 07:00:00
之间的间隔将为0,xxx,而不是1.您应该修剪每个日期的时间部分。
所以它应该是:
$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT')));
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT')));
$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;
答案 5 :(得分:0)
echo 'time'.$notification_time= "2008-12-13 10:42:00";
date_default_timezone_set('Asia/Kolkata');
echo 'cureen'.$currenttime=date('Y-m-d H:i:s');
$now = new DateTime("$notification_time");
$ref = new DateTime("$currenttime");
$diff = $now->diff($ref);
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i);
答案 6 :(得分:0)
如果要使用diff(它返回Dateinterval对象)方法,正确的方法是使用%a格式化。我的意思是:
如果您选中http://php.net/manual/en/dateinterval.format.php
正确的方法是:
echo $date1->diff($date2)->format("%a");
获取所有日子