如何在PHP中获得两个日期之间的绝对日期差?
我看到在其他语言中也有关于这个问题的帖子,但我找不到一篇关于PHP的帖子。我不是在寻找两个约会时间之间的差异,而是在寻找有多少天不同。例如:如何在PHP中获得两个日期之间的绝对日期差?,php,date,php-5.2,Php,Date,Php 5.2,我看到在其他语言中也有关于这个问题的帖子,但我找不到一篇关于PHP的帖子。我不是在寻找两个约会时间之间的差异,而是在寻找有多少天不同。例如: 2011-08-06 14:05:28 及 2011-08-07 08:46:28 相隔不到一天,但我需要一个函数,该函数将告诉我它们位于相隔一天的日期,即,将为这两个日期返回值1,并为以下日期返回值2,例如: 2011-08-06 23:05:28 及 2011-08-08 01:46:28 真的,我猜这一定很容易,但我以前没怎么和约会过 哦,还有一个限
2011-08-06 14:05:28
及
2011-08-07 08:46:28
相隔不到一天,但我需要一个函数,该函数将告诉我它们位于相隔一天的日期,即,将为这两个日期返回值1
,并为以下日期返回值2
,例如:
2011-08-06 23:05:28
及
2011-08-08 01:46:28
真的,我猜这一定很容易,但我以前没怎么和约会过
哦,还有一个限制,我需要与PHP5.2兼容的东西,所以不能使用DateTime::diff
编辑:更改为澄清我确实需要一个数字返回值,抱歉:)
Ymd
似乎是合适的$Format
)如果您需要以天为单位的实际差异,请分别调用
date
,使用Y
、m
和d
作为格式,从结果中构造时间戳(使用),并将时间戳之间的差异除以86400(每天的秒数)。如果我正确解释了问题,您需要一个或多个mysql
这两个函数都返回一个特定日期的值,该日期基本上是自“第0天”起的天数
更新
如果您真的想要从日期到日期之间的天数,我建议您更新到PHP5.3。计算天数可能相当困难,特别是如果您希望能够处理不同年份的天数
$days = abs(date('z', strtotime($date1)) - date('z', strtotime($date2)));
这是我能做的最好的了,但它要求$date1
和$date2
在同一年
$secondsApart = strtotime( '2011-08-07 08:46:28' ) -
strtotime( '2011-08-06 14:05:28' );
现在,您可以基于此计算任何其他值:
$hoursApart = round( $secondsApart / 3600 );
$daysApart = round( $secondsApart / 86400 );
...
如果更适合您的需要,您也可以使用floor()或ceil()代替round()。我会尝试类似的方法(主要使用时间戳):
我用你的两个测试用例都试过了,它完全符合你的要求。如果需要任何更改,可以编辑该函数。希望有帮助 与上述评论相同。。。我真的很想得到一个数字答案。这将返回不同月份相同日期的错误答案,即
2011-08-15
和2011-09-15
。可能重复不确定。。。我不需要月或年,只需要天数,因此选择的答案(而不是2年、3个月、2天,我想要795)是的,to_days
看起来不错。。。我不确定另一个,我不清楚它会返回什么值…嘿,如果这有效,听起来是一个简单的解决方案。。。我会试试看,然后再打给你。
$secondsApart = strtotime( '2011-08-07 08:46:28' ) -
strtotime( '2011-08-06 14:05:28' );
$hoursApart = round( $secondsApart / 3600 );
$daysApart = round( $secondsApart / 86400 );
...
/**
* @param string $date1
* @param string $date2
* @return int
* Number of days between the two dates.
*/
function date_diff_days($date1, $date2) {
// Ignore the time part and convert the date part to timestamp.
$date1 = substr($date1, 0, 10);
$date1 = strtotime($date1 . ' 00:00:00');
$date2 = substr($date2, 0, 10);
$date2 = strtotime($date2 . ' 00:00:00');
// Compute the difference in seconds.
$diff_secs = abs($date1 - $date2);
// Convert the difference to days.
$diff_days = ceil($diff_secs / (60 * 60 * 24));
return $diff_days;
}