在php中减去两个日期

Dmi*_*iyd 28 php

我在php中有两个约会

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

$date2 = '06 Apr 2012 07:22:21 GMT'
Run Code Online (Sandbox Code Playgroud)

然后我减去它们

$date2 - $date1
Run Code Online (Sandbox Code Playgroud)

,得到

Result:6
Run Code Online (Sandbox Code Playgroud)

为什么结果是6而不是27?......?如何减去两个日期,并根据月份差异返回结果,同时减去年份和日期和时间?

eva*_*van 62

第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;
Run Code Online (Sandbox Code Playgroud)

适当转换.


Shi*_*dim 16

使用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");
Run Code Online (Sandbox Code Playgroud)


ajm*_*bal 12

有一种方法可以使用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");
Run Code Online (Sandbox Code Playgroud)

第四种方式

$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;
Run Code Online (Sandbox Code Playgroud)


Rom*_* KC 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);
Run Code Online (Sandbox Code Playgroud)

此代码将找到两个日期之间的日期差异.

这里输出是27


ex3*_*x3v 5

大多数提出的解决方案似乎都有效,但每个人都忘记了一件事:时间.

埃文为例:

$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;
Run Code Online (Sandbox Code Playgroud)

当你不修剪时间部分时,可能导致milscalculations.例如: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;
Run Code Online (Sandbox Code Playgroud)