在 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:25
,datetime2
是当前日期时间。为什么 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;
你犯了两个错误:
date
function 的 $format
参数中的分钟数必须表示为 i
(而不是像您那样 m
)。
$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";
}
我需要一些关于此代码的帮助:
$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:25
,datetime2
是当前日期时间。为什么 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;
你犯了两个错误:
date
function 的$format
参数中的分钟数必须表示为i
(而不是像您那样m
)。$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";
}