37

我在 php 中有两个日期

$date1 = 'May 3, 2012 10:38:22 GMT'

$date2 = '06 Apr 2012 07:22:21 GMT'

然后我减去它们

$date2 - $date1

,并得到

Result:6

为什么结果是 6 而不是 27?... ? 我怎样才能减去这两个日期,并让它根据月份差异返回一个结果,同时减去年&日&时间?

4

7 回答 7

74

第 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;

酌情转换。

于 2012-05-06T08:03:03.333 回答
21

使用DateTimeDateInterval

$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");
于 2012-05-06T08:03:03.940 回答
14

有一种方法可以使用 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;
于 2012-05-06T08:05:41.053 回答
6

大多数提出的解决方案似乎都在起作用,但每个人都忘记了一件事:时间。

埃文为例:

$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;

当您不修剪时间部分时,可能会导致精确计算。例如:2014-05-01 14:00:00(Ymd) 和之间的间隔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;
于 2014-05-09T08:53:21.637 回答
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

于 2013-05-27T10:42:39.580 回答
2
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);
于 2016-10-22T06:18:12.393 回答
0

如果要使用 diff(它返回一个 Dateinterval 对象)方法,正确的方法是使用 %a 进行格式化。我是说:

如果您检查http://php.net/manual/en/dateinterval.format.php

正确的方法是:

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

为了得到所有的日子

于 2016-12-30T11:20:18.653 回答