在 php 中使用 strtotime 检查日期间隔

Check a date interval with strtotime in php

我需要一些关于此代码的帮助:

$key['time_stamp'] = '2016-09-02 16:56:25';
$datetime1 = strtotime(date($key['time_stamp']));
$datetime2 = strtotime(date('Y-m-d H:m:s'));
$interval = $datetime2 - $datetime1;
$val = 45 * 60 * 1000;

if ($interval > $val) { }

我的目的是检查两个日期之间的 $interval 是否大于 45 分钟。

$key['time_stamp']2016-09-02 16:56:25datetime2 是当前日期时间。为什么 if 条件永远不会为真?!

我是不是漏掉了什么蠢东西?!

如果$key['time_stamp']是'2016-09-02 16:56:25',不应该是

$datetime1  = strtotime ( $key['time_stamp'] );

而不是

$datetime1  = strtotime ( date ($key['time_stamp']) );

?

这一行:

$val = 45*60*1000;

以毫秒为单位给出 45 分钟,我猜你想要:

$val = 45*60;

你犯了两个错误:

  1. date function$format 参数中的分钟数必须表示为 i(而不是像您那样 m)。
  2. $interval 以秒为单位(因此您不必乘以 1000,就好像它们是毫秒一样)。

所以你的代码应该这样写:

$key['time_stamp'] = '2016-09-02 16:56:25';
$datetime1 = strtotime(date($key['time_stamp']));
$datetime2 = strtotime(date('Y-m-d H:i:s'));
$interval = $datetime2 - $datetime1;
$val = 45 * 60;

if ($interval > $val) { }

我发现使用 DateTime() 对象更容易推理,并且它们在 if 语句中具有明显的可比性。

我想推荐一个替代方法:

<?php

$key['time_stamp'] = '2016-09-02 16:56:25';

$then = new DateTime($key['time_stamp']);
$interval = new DateTime('-45 minutes');

if ($then < $interval) {
    echo 'interval passed';
} else {
    echo 'interval not passed';
}

这产生:

interval passed

希望这对您有所帮助:)

一个不适用于您的情况但值得一提的警告:如果您使用 DateTime::createFromFormat() 创建一个带有 UNIX 时间戳的 DateTime() 对象,请务必检查两个 DateTime() 对象有相同的时区。

这是您的查询的解决方案。

$key['time_stamp'] = "2016-09-02 16:56:25";
   $datetime1 = strtotime ( date ($key['time_stamp']) );
   $datetime2  = strtotime ( date('Y-m-d H:i:s'));

   $interval   = round(($datetime2 - $datetime1)/ 60); //interval in minutes

   $val = 45; //45 minutes
   if ($interval > $val) {
     echo "Success";
   }