我想使用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;
答案 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
的其他示例