没有得到要求的日期

时间:2018-09-26 15:13:41

标签: php datetime

我想使用date_diff()计算日期之间的差异,第一个参数将数据保存在数据库中,第二个参数是今天的日期。 $ pro_deadline来自数据库,类型为文本(格式yyyy-mm-dd),因此我使用strtotime()将其转换为时间。但最后我得到了“ 警告 :date_diff()期望参数1为DateTimeInterface,字符串为“

$today = date("Y-m-d");
echo $today;
$end = strtotime($pro_deadline);
$end_line = date("Y-m-d",$end);
echo $end_line;
$diff = date_diff($end_line,$today);
echo $diff;

4 个答案:

答案 0 :(得分:1)

就像错误消息指出的那样,date_diff需要DateTimeInterface参数。 strtotime以整数形式返回时间戳,该时间戳不能使用。

您可以将截止日期传递给DateTime构造函数,而不是创建时间戳,同时将其默认为现在的另一个版本:

$today = new DateTime;
$end = new DateTime($pro_deadline);

,然后将这两个对象传递给date_diff,并使用DateInterval::format方法显示天数(假设这是您期望的输出):

$diff = date_diff($today,$end);
echo $diff->format('%a');

有关完整示例,请参见https://3v4l.org/QVkad

答案 1 :(得分:1)

根据PHP文档http://php.net/manual/en/function.date-diff.php

date_diff — Alias of DateTime::diff()

因此date_diff的性能参数应为DateTimeInterface类型。

我会尝试

<?php

$today = date("Y-m-d");
echo $today."            ";
$today = date_create($today);
$pro_deadline = '10-15-18';
$end = strtotime($pro_deadline);
$end_line = date_create(date("Y-m-d",$end));
$diff = date_diff($end_line,$today);
echo $diff->format('%a');
echo " days apart";
?>

date_create()函数是DateTime构造函数的别名。 http://php.net/manual/en/datetime.construct.php

这将为date_diff()函数可以解释的日期/时间创建一个接口。然后date_diff()返回一个DateInterval对象

http://php.net/manual/en/class.dateinterval.php

DateInterval对象具有格式方法

http://php.net/manual/en/dateinterval.format.php

可以为您返回日期的字符串。

希望这种解释有所帮助!

答案 2 :(得分:0)

首先,如果要在数据库中的日期和今天的日期之间进行区别,只需直接在数据库中进行操作即可。您没有指定哪个数据库,但是例如在MySQL中,您将执行以下操作:

SELECT DATEDIFF(some_field, now()) FROM ...

如果您坚持使用PHP进行操作,则不要使用strtotime对象,而要使用DateTime对象:

$today = new DateTime();
$end = new DateTime($pro_deadline);
$diff = $end.diff($today)

答案 3 :(得分:0)

date()函数返回一个简单的字符串,但是date_diff()函数期望一个日期 object

使用DateTime类中的函数,您可以更轻松地完成所有操作:

$pro_deadline = "2018-09-01";
$today = new DateTime();
$end = new DateTime($pro_deadline);
$interval = $end->diff($today);
echo $interval->format('%R%a days');

此示例输出+25 days Click here for Runnable Demo

diff()函数here

的其他示例