从DateTime()获取的日期超过30/31,因此它不会持续数月

时间:2013-04-25 09:10:32

标签: php date datetime timestamp unix-timestamp

我正在使用DateTime()计算2个日期之间的差异,并且它正常工作。问题是我希望天数格式能够超过整月,所以30/31或更高。

$now = new DateTime();
$future_date = new DateTime($contest->expires_at);

$interval = $future_date->diff($now);
$enddate = $interval->format("%m month, %d days, %h hours, %i minutes");

目前的问题是,当我没有显示月份时,日期只能达到30/31,并且任何超过这个数字的日期都会结转,以便重新计算剩余日期的天数。 我希望能够在这种格式的差异为6周时显示42天:

$enddate = $interval->format("%d days, %h hours, %i minutes");

是否有快速解决方法,或者我是否需要手动将时间戳转换为秒并使用我自己的函数和模数运算符?

3 个答案:

答案 0 :(得分:1)

您可以尝试:

$enddate = $interval->format("%a days, %h hours, %i minutes");

请参阅手册中的DateInterval::format

注意

如果您正在使用Windows,请处理bug

答案 1 :(得分:1)

这可以解决您的问题:

$now = new DateTime();
$future_date = new DateTime();

// a period of 2 months
$addPeriod = new DateInterval('P2M');

// adding the period
$future_date->add($addPeriod);

// get the differnce
$interval = $future_date->diff($now);

echo($interval->days) . ' days';

今天:echo返回'61天'

//编辑

为避免遇到dateInterval-Bug,您可以使用:

$now = new DateTime();
$future_date = new DateTime();

// a period of 2 months
$addPeriod = new DateInterval('P2M');

// adding the period
$future_date->add($addPeriod);

// get the difference in second
$diffTimestamp = $future_date->getTimestamp() - $now->getTimestamp();

// convert to days
// 1 day = 86.400 seconds
$diffDays = $diffTimestamp/86400;

echo(floor($diffDays)) . ' days';

答案 2 :(得分:0)

更新我的php版本,因为这是我的旧版本中的一个错误,现在它可以完美运行。

How to get aggregate days from PHP's DateTime::diff?