首页 > 解决方案 > date_create 和 date_diff 在我使用 format 或 date_format 时出现问题

问题描述

我有这个函数,它将开始日期和结束日期作为查找报告的日期范围。我有两个开始日期类型不同的表,但问题是这个查找必须能够显示这两个表的结果,即使两列彼此不同。另一个表,我们称之为表 1,包含以毫秒为单位的开始日期;以前就是这样设置的。对此的输入采用报告上传的日期并将其转换为毫秒。另一个表,表 2,将日期自动转换为类似 2019-02-05T11:51:20 格式的日期;表 2 中的所有开始日期都是这种格式。这是上传到数据库的格式。有人告诉我,这就是 android 设备的操作方式,或者说' s 如何写入开始日期的输入。两个表的结束日期都以毫秒为单位。我不知道为什么表 2 的结束日期以这种格式存储。查找来自表 1 的报告很好。该表格给了我预期的结果,但是当我从表 2 中搜索报告时,我得到了类似的错误

警告:date_diff() 期望参数 1 是 DateTime,字符串在

致命错误:在非对象上调用成员函数 format()

function dateDifference($date_1, $date_2, $differenceFormat = '%a') // %a
{
    $datetime1 = date_create($date_1)->format("Y-m-d\TH:i:s");
    //$datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);
    $interval = date_diff($datetime1, $datetime2);

    return $interval->format($differenceFormat) * 8.64e+7;
}

我也试过这个但同样的事情。

// function dateDifference2($date_1, $date_2, $differenceFormat = 'Y-m-d\TH:I:s') //Y-m-d\TH:i:s
// {
//  $dateTime1 = date_create($differenceFormat, $date_1);
//  $dateTime2 = date_create($date_2);
//      $interval = date_diff($dateTime1, $dateTime2);
//      return $interval->format($differenceFormat) * 8.64e+7;
// }

有人可以帮我吗?谢谢!注意:我不能为此更改日期类型。这就是两者的设置或编写方式。我对此无能为力。我只能根据给我的东西或我拥有的东西做事。第一个应用程序是由不同的组编写的,第二个也是如此。

标签: phpmysql

解决方案


这条线有两个问题:

$datetime1 = date_create($date_1)->format("Y-m-d\TH:i:s");

首先,date_create需要一个字符串,而不是以毫秒为单位的值。您可以通过date_timestamp_set将该值除以 1000 来解决此问题。

其次,您正在制作$datetime1一个字符串,而不是DateTime通过调用format. 您需要删除->format("Y-m-d\TH:i:s");

所以总的来说,你应该把第一行改成这样:

$datetime1 = (new DateTime())->setTimeStamp($date_1/1000);

您需要为$datetime2. 请注意,因为$date_1可能是数字或日期字符串,您需要检查并适当更改代码,例如

function dateDifference($date_1, $date_2, $differenceFormat = '%a') // %a
{
    if (is_numeric($date_1)) 
        $datetime1 = (new DateTime())->setTimeStamp($date_1/1000);
    else
        $datetime1 = new DateTime($date_1);
    $datetime2 = (new DateTime())->setTimeStamp($date_2/1000);
    $interval = $datetime1->diff($datetime2);
    return $interval->format($differenceFormat) * 8.64e+7;
}

3v4l.org 上的演示


推荐阅读