【问题标题】:Getting days from DateTime() above 30/31 so it doesn't carry over to months从 DateTime() 获取超过 30/31 的天数,因此它不会延续到几个月
【发布时间】:2013-04-19 02:41:34
【问题描述】:

我正在使用 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");

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

【问题讨论】:

标签: php date datetime timestamp unix-timestamp


【解决方案1】:

你可以试试:

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

请参阅手册中的DateInterval::format

注意

如果您在 Windows 上工作,请注意bug

【讨论】:

  • $enddate = $interval->format("%m months, %d days, %h hours, %i minutes"); 这给了我 0 个月、6 天、23 小时、52 分钟的差异。 Wich 是正确的,因为我从一周开始倒计时。当我尝试时:$enddate = $interval->format("%a days, %h hours, %i minutes"); 我得到了 6015 天 23 小时 50 分钟?
  • @user2294225 这很奇怪。我用“2013-06-01 00:00:00”作为你的$contest->expires_at 测试了你的代码,它向我显示了正确的响应36 days, 6 hours, 14 minutes。你的答案是什么php版本?
  • @user2294225,看来你已经在windows上发现了这个bug。:)
【解决方案2】:

这应该可以解决您的问题:

$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';

【讨论】:

【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-27
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多