繁体   English   中英

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

[英]Getting days from DateTime() above 30/31 so it doesn't carry over to months

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

有没有快速修复此问题,还是我需要手动将时间戳转换为秒并使用我自己的函数与模数运算符?

你可以试试:

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

请参阅手册中的DateInterval :: format

注意

如果你正在使用Windows,请注意这个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 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';

更新我的PHP版本,因为这是我的旧版本中的一个错误,现在它完美地工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM