PHP天数计算错误

时间:2017-06-27 15:05:11

标签: php datetime

我有这个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天。我怎么解决这个问题?

3 个答案:

答案 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');