繁体   English   中英

当我使用format或date_format时,date_create和date_diff出现问题

[英]date_create and date_diff having issues when I use format or date_format

我有此功能,将开始日期和结束日期作为查询报告的日期范围。 我有两个类型不同的开始日期表,但是问题是,即使两列彼此不同,此查找也必须能够显示这两个表的结果。 另一个表称为表1,其中包含开始日期(以毫秒为单位); 这就是之前的设置。 输入的内容是报告上载的日期,并将其转换为毫秒。 另一个表(表2)中的日期会自动将日期转换为这种2019-02-05T11:51:20格式; 表2中的所有开始日期都采用这种格式。 这是上载到数据库的格式。 有人告诉我,这就是android设备的工作方式,或者那是写开始日期的输入的方式。 两个表的结束日期都以毫秒为单位。 我不知道为什么表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;
// }

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

此行有两个问题:

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

首先, date_create需要一个字符串,而不是毫秒值。 您可以通过使用date_timestamp_set并将其除以1000来解决此问题。

其次,通过调用format$datetime1为字符串,而不是DateTime对象。 您需要删除->format("Ymd\\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上的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM