我有这个PHP代码来计算当前日期和特定日期之间的天数。
<?php
$query = mysql_query("SELECT * FROM library_users LEFT JOIN students ON library_users.student_id = students.student_id LEFT JOIN books ON library_users.book_id = books.book_id WHERE library_users.student_id <> ''")or die(mysql_error());
while($library_users = mysql_fetch_array($query))
{
$datefrom = date('d-m-Y');
$dateto = $library_users['return_date'];
$datefrom = DateTime::createFromFormat('d-m-Y', $datefrom);
$dateto = DateTime::createFromFormat('d-m-Y', $dateto);
$date_dur = $datefrom->diff($dateto);
$days = $date_dur->format('%d');
}
目前的日期是27-06-2017;当我输入明天的日期是28-06-2017我得到1天这很好,但是当我输入27-07-2017(下个月)它给我0天。我怎么解决这个问题?
答案 0 :(得分:2)
问题在于您使用%d
格式来获取日期,但这会在一个月内为您提供差异。
改为使用%a
:
$days = $date_dur->format('%a');
http://php.net/manual/en/dateinterval.format.php
a ==&gt; DateTime :: diff()
的总天数答案 1 :(得分:0)
在27-06-2017和27-07-2017之间转储你的对象给我这个:
object(DateInterval)#4 (15) { ["y"]=> int(0) ["m"]=> int(1) ["d"]=> int(1) ["h"]=> int(0) ["i"]=> int(0) ["s"]=> int(0) ["weekday"]=> int(0) ["weekday_behavior"]=> int(0) ["first_last_day_of"]=> int(0) ["invert"]=> int(0) ["days"]=> int(31) ["special_type"]=> int(0) ["special_amount"]=> int(0) ["have_weekday_relative"]=> int(0) ["have_special_relative"]=> int(0) }
所以你是对的:它给你0天但是1个月([&#34; m&#34;] =&gt; int(1))
您必须使用:
$date_dur->days
获取实际天数。
问候。
答案 2 :(得分:0)
按设计工作。
DateTime::diff()
返回DateInterval
类型的对象。
DateInterval
对象存储间隔的年份和细分(月,日,小时,分钟和秒)。您可以使用格式"%d"
将其告知format()
。
%d
格式说明符表示天数;不是间隔中的绝对天数,而只是最后一个不完整月份的天数。
显示总天数的格式为"%a"
:
$days = $date_dur->format('%a');