PHP 日期差异 30 天后出现错误?

标签 php diff

我有一个以分钟为单位的日期差异..然后1小时后变成小时..然后24小时后变成天..然后奇怪的是30天后又回到小时

为什么?!我在这段代码中缺少什么或者这是一些错误?!

  $d_start = new DateTime('now');
  $d_end  = new DateTime($last_gdate);
  $d_dif = $d_start->diff($d_end);
  $d_d = $d_dif->d;
  $d_h = $d_dif->h;
  $d_m = $d_dif->i;
    if ($d_d < 1) {
      if ($d_h < 1) {
        $d_since = $d_m . "m";
      } else {
        $d_since = $d_h . "h";
      }
    } else {
      $d_since = $d_d . "d";
    }

最佳答案

您会注意到 DateTime 的 diff() 将在下个月重新启动 d。如果您不打算检查/兑现m,则应使用days

代码:(Demo)

$last_gdate = "2018-07-23 00:01:02";
$d_start = new DateTime('now');
$d_end  = new DateTime($last_gdate);
$d_dif = $d_start->diff($d_end);
var_export($d_dif);
$d_d = $d_dif->days;
$d_h = $d_dif->h;
$d_m = $d_dif->i;
if ($d_d < 1) {
  if ($d_h < 1) {
    $d_since = $d_m . "m";
  } else {
    $d_since = $d_h . "h";
  }
} else {
  $d_since = $d_d . "d";
}

echo "\n$d_since";

输出:

DateInterval::__set_state(array(
   'y' => 0,
   'm' => 1,
   'd' => 0,
   'h' => 6,
   'i' => 42,
   's' => 2,
   'f' => 0.002468,
   'weekday' => 0,
   'weekday_behavior' => 0,
   'first_last_day_of' => 0,
   'invert' => 1,
   'days' => 31,
   'special_type' => 0,
   'special_amount' => 0,
   'have_weekday_relative' => 0,
   'have_special_relative' => 0,
))
31d

关于PHP 日期差异 30 天后出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978353/

相关文章:

php - 将输入数据与从数据库查询的数据进行比较

php - 整个产品属于折扣品类吗?

linux - 需要包含一个带有 'diff' 实用程序的新文件作为补丁

diff - 针对特定变更列表强制执行差异文件

javascript - 将 php 变量传递给单独的 javascript 文件

php - 如果服务器上是否存在文件夹,如何使用 PHP FTP 功能检查?

diff - 带有 "<<<<<<< mine"和 ">>>>>>> yours"类型标记的带注释的差异文件

Xcode 6.1 对 git 的表现很奇怪

vim - 如何干净地编辑差异/补丁文件?有补丁文件编辑器吗?

php - Laravel 4 Auth::attempt() 总是返回 false