繁体   English   中英

在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函数$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';
}

这样产生:

间隔过去

希望这可以帮助 :)

一个不适合您的情况的警告,但值得一提:如果使用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";
   } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM