我看到其他语言中有关于此问题的其他帖子,但我找不到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
真的,我猜这一定很容易,但我之前的日期并不多。
哦,还有一个限制,我需要与PHP 5.2兼容的东西,所以不能使用DateTime::diff
。
编辑:改为澄清我确实需要一个数字返回值,抱歉:)
答案 0 :(得分:1)
如果我正确解释问题,您需要GregorianToJD或mysql to_days
这两个函数都会为特定日期返回julian day,这基本上是“第0天”以来的天数。
答案 1 :(得分:1)
$date1 = "2011-08-06 14:05:28";
$date2 = "2011-08-07 08:46:28";
if(date('Ymd', strtotime($date1)) == date('Ymd', strtotime($date2)))
{
// Same day!
}
<强>更新强>
如果你真的想要几天之间的天数,我建议你更新到PHP 5.3。计算天数可能相当困难,特别是如果您希望能够处理不同年份的天数。
$days = abs(date('z', strtotime($date1)) - date('z', strtotime($date2)));
这是我能做的最好的事情,但要求 $date1
和$date2
是同一年。
答案 2 :(得分:0)
$date1 = "2011-08-06 14:05:28";
$date2 = "2011-08-07 08:46:28";
if(date("Ymd",strtotime($date1)) == date("Ymd",strtotime($date2)) {
// they match
} else {
// calculate the difference
$diff = ceil(abs(strtotime($date1)-strtotime($date2))/86400);
}
答案 3 :(得分:0)
date
函数格式化时间戳(Ymd
似乎是合适的$format
)。如果您需要天数的实际差异,请使用date
,Y
和m
作为格式分别致电d
,从结果中构建时间戳(使用{{3并且将时间戳之间的差异除以86400(每天的秒数)。
答案 4 :(得分:0)
$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()。
答案 5 :(得分:0)
我会尝试这样的事情(主要使用时间戳):
/**
* @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;
}
我用你的测试用例试了一下,它就像你想要的那样工作。如果您想要进行任何更改,可以编辑该功能。希望它有所帮助!