PHP datediff overday 问题

PHP datediff overday issue

我希望在两次之间获得日期差异:第一次是在晚上(如 23:59:59),第二次是在新的一天(如 02:02:02)。使用 datediff 时,它没有显示正确的差异:

echo date_diff(date_create("02:02:02"), date_create("23:59:59"))->format('%H:%I:%S');
response: 21:57:57 (IS WRONG SOMEHOW)

echo date_diff(date_create("02:02:02"), date_create("00:00:00"))->format('%H:%I:%S');
response: 02:02:02 (ECHOS CORRECT TIME)

我怎样才能让它工作?

如果日期改变了,那么你必须告诉它,否则它会假设今天。你可以这样检查:

echo date_diff(date_create("tomorrow 02:02:02"), date_create("23:59:59"))->format('%H:%I:%S');
// 02:02:03

您可以通过转储来验证 date_create 正在创建什么:

var_dump(date_create("02:02:02"));
// object(DateTime)(
//   'date' => '2019-08-16 02:02:02.000000',
//   'timezone_type' => 3,
//   'timezone' => 'America/New_York'
// )

var_dump(date_create("tomorrow 02:02:02"));
// object(DateTime)(
//   'date' => '2019-08-17 02:02:02.000000',
//   'timezone_type' => 3,
//   'timezone' => 'America/New_York'
// )

var_dump(date_create("00:00:00")); // 00:00 being start of day, not end
// object(DateTime)(
//   'date' => '2019-08-16 00:00:00.000000',
//   'timezone_type' => 3,
//   'timezone' => 'America/New_York'
// )