我在数据库中有一个日期,我想将其与当前日期进行比较。所以我写了下面的函数:
$today = new DateTime();
$today_date = $current_date->format('Y-m-d H:i:s');
function do_diifernce($date_1, $date_2) {
$my_date = $date_1;
$createDate = new DateTime($my_date);
$strip = $createDate->format('Y-m-d');
$difference = $date_2->diff($createDate, true);
$difference->total_difference = $difference->y . "." . $difference->m;
return $difference;
}
$comparison = do_diifernce($databse_date, $today_date);
所以
$databse_date = 2019-06-01 00:00:00.000000
$today_date = 2019-05-06 10:48:01
但是我无法打印$comparison
的值。
PHP致命错误:未捕获错误:在字符串上调用成员函数diff()
我该如何解决?
答案 0 :(得分:2)
您将$today_date
传递给do_diifernce()
,它是一个字符串(因为您已经用format()
对其进行了格式化)。您可以传入$today
(是一个对象),也可以包含一个条件来检查其是否是一个对象。
function do_difference($date_1, $date_2) {
// Check if the arguments were DateTime objects - if not, instantiate them as that
if (!($date_1 instanceof DateTime)) {
$date_1 = new DateTime($date_1);
}
if (!($date_2 instanceof DateTime)) {
$date_2 = new DateTime($date_2);
}
// Compare the difference and return the Y and m properties
$difference = $date_2->diff($date_1);
$difference->total = $difference->y . "." . $difference->m;
return $difference;
}
$today = new DateTime();
$comparison = do_difference($databse_date, $today);
答案 1 :(得分:1)
您将日期2作为字符串播放,应将其当作datetime对象,以获取两个datetime对象之间的差异。
function do_diifernce($date_1, $date_2)
{
$createDate1 = new DateTime($date_1);
$createDate2 = new DateTime($date_2);
$difference = $createDate2->diff($createDate1);
$sign = ($createDate1 < $createDate2 ? '-':'+');
$difference->total_difference = $difference->format("%r%a");
return $difference;
}
$databse_date = "2019-05-01 00:00:00";
$today_date = "2019-05-06 10:48:01";
$comparison = do_diifernce($databse_date, $today_date);
print_r($comparison);die;
这里是官方doc。
您检查该数组,因为年份和月份没有差异,因为两个日期都属于同一月份和年份,所以它即将到来0.0
答案 2 :(得分:0)
您在这里遇到错误:$difference = $date_2->diff($createDate, true);
。 AFAIK,diff()
函数在PHP 5.3之后不推荐使用。
如果要计算两个日期之间的时差,可以使用date_diff
,如下所示。
<?php
$date1 = date_create("2000-04-01");
$date2 = date_create("2019-04-06");
$diff = date_diff($date1, $date2);
?>
答案 3 :(得分:0)
抛出错误,因为您在date2上调用format
,它返回一个字符串,没有DateTime对象。
删除对format的调用,则您的比较应该可以进行。
您要做的就是用以下内容替换最后一行:
$comparison=do_diifernce($databse_date, $today);