php - 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;
// }
有人可以帮我吗?谢谢!注意:我不能为此更改日期类型。这就是两者的设置或编写方式。我对此无能为力。我只能根据给我的东西或我拥有的东西做事。第一个应用程序是由不同的组编写的,第二个也是如此。
解决方案
这条线有两个问题:
$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;
}
推荐阅读
- c# - 将表存储中的数据从字符串转换为 .NET SDK 中的其他格式
- javascript - 如何找到多个复选框的值
- python - 使用 .replacewith 时表单未提交
- c++ - 原子获取是否与互斥锁释放同步?
- c++ - 使用复制构造函数修复浅拷贝
- php - Prestashop v1.7.5.1“添加到购物车”速度慢,TTFB 非常高
- vue.js - 构建后无法导入和使用vuejs单文件组件
- assembly - 如何在 ELF 标头中嵌入机器代码?Err: 执行格式错误
- c++ - 如何检索 Steamwork SDK 的当前版本
- android - 锁定和解锁手机后 ViewModel 被销毁