我需要一些关于此代码的帮助:
$interval
我的目的是检查两个日期之间的$key['time_stamp']
是否大于45分钟。
2016-09-02 16:56:25
为datetime2
,if
为当前日期时间。为什么procedure TForm3.Timer1Timer(Sender: TObject);
var
k: Integer;
InBuffer: array[1..500] of char;
begin
for k:=1 to 500 do
InBuffer[k]:=' ';
Trim(InBuffer);
if cport.Connected = true then
begin
ComLed1.Kind := lkGreenLight;
cport.ReadStr(str,k);
Trim(str);
S:=str;
if str = '' then
begin
end
else
begin
memo1.lines.Add(str);
end;
end
else
begin
ComLed1.Kind := lkredLight;
txt_com_status1.Caption := 'Connected';
end;
end;
条件永远不会成立?!
我是否错过了一些愚蠢或什么?!
答案 0 :(得分:2)
如果$ key [' time_stamp']是' 2016-09-02 16:56:25',则不应该
$datetime1 = strtotime ( $key['time_stamp'] );
而不是
$datetime1 = strtotime ( date ($key['time_stamp']) );
答案 1 :(得分:1)
这一行:
$val = 45*60*1000;
以毫秒为单位给出45分钟,我想你想要:
$val = 45*60;
答案 2 :(得分:0)
你犯了两个错误:
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) { }
答案 3 :(得分:0)
我发现使用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()
对象是否具有同一时区。
答案 4 :(得分:0)
以下是您的查询解决方案。
$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";
}