0

我正在使用 DateTime() 计算两个日期之间的差异,它工作正常。问题是我希望天数格式能够超过一整月,因此 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,并且任何超出的内容都将被结转以使新的月份重新计算剩余天数的天数。我希望能够以这种格式显示 42 天的差异为 6 周:

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

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

4

3 回答 3

1

你可以试试:

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

请参阅手册中的DateInterval::format

笔记

如果您在 Windows 上工作,请注意该错误。

于 2013-04-25T09:20:57.363 回答
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 天”

// 编辑

为避免遇到 dataInterval-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';
于 2013-04-25T09:42:56.870 回答
0

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

如何从 PHP 的 DateTime::diff 获取聚合天数?

于 2013-04-27T14:52:00.387 回答