【问题标题】:PHP datediff overday issuePHP datediff 过日问题
【发布时间】:2019-08-16 18:05:20
【问题描述】:

我希望在两次之间获取日期差异:第一次是在晚上(例如 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)

我怎样才能让它工作?

【问题讨论】:

  • var_dump(date_create("02:02:02"), date_create("23:59:59"), date_create("00:00:00"));

标签: php datediff


【解决方案1】:

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

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'
// )

【讨论】:

  • 我认为对于这个问题,如果日期相同,还值得注意的是 00:00:00 不高于 23:59:59。否则,它可能会消除有关日期时差的任何混淆。 (00:00:00 是与非最高日期相关的最低时间)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多