【问题标题】:How to check a time array if the single values are in +/- 15 minute range of another time如果单个值在另一个时间的 +/- 15 分钟范围内,如何检查时间数组
【发布时间】:2015-05-25 07:33:34
【问题描述】:

我应该怎么做才能使 4 位整数/字符串的行为(不看起来)像时间?

考虑这段代码:

$t = 0430;
$timeArray = array('0400', '0415', '0420', '0430', '0440', '0450', '0500', '0600');

现在,如果我必须在 $timeArray 中搜索距离 $t +/- 15 分钟的元素,我会这样做:

foreach($timeArray AS $time){
    if($time <= $t + 15 && $time >= $t - 15){
        return $time;
    }
}

应该没有问题。我会回来的:

0415, 0420, 0430, 0440

但如果$t = 0445 和$t = 0505 我显然会分别错过0500 和0450。

现在我如何让$t 和/或$timeArray 元素表现得像时间一样? 0500 是在 0459 之后而不是 0460 之后?

编辑:

  1. 欢迎使用逻辑技巧。除非您使用 PHP 预定义函数,否则不必只在 PHP 中使用 :)
  2. 我正在从 Web 服务获取“整数时间”。因此,如果我可以将其转换为“Time/TimeStamp”,那就太好了!
  3. 我的错。 4 位字符串。喜欢'0400'

【问题讨论】:

  • 所有小于 1000 的整数现在都是整数的八进制表示。我认为您需要了解PHP中的基础。
  • 为什么需要那个 4 位数的时间?将它们用作键并将实际时间戳存储在数组中。
  • @b0s3:请阅读我的 EDIT2
  • @MichaelSivolobov 我的坏。那些是字符串。我已经编辑了问题。
  • 在比较之前,你必须转换为 int

标签: php time logic strtotime


【解决方案1】:

这应该适合你:

首先通过array_map()循环遍历所有值,将所有字符串转换为时间戳。

在此之后,您可以简单地遍历您的值并检查它们是否在 15 分钟范围内。

<?php

    $t = "0430"; 
    $timeArray = array('0400', '0415', '0420', '0430', '0440', '0450', '0500', '0600');

    $timestampes = array_map("strtotime", $timeArray);
    $t = strtotime($t);

    foreach($timestampes as $time){
        if($time <= $t + (15*60) && $time >= $t - (15*60)){
            echo date("H:i:s", $time) . "<br>";
        }
    }

?>

输出:

04:15:00
04:20:00
04:30:00
04:40:00

【讨论】:

  • 但是 strtotime() 将 $t 和数组元素转换为今天的时间。因此,即使将 date 附加到 array('date' => date, 'time' => 0400) 这样的数组,并且由于我只是在比较时间,这应该仍然有效。那很聪明。谢谢!
  • @eNeMetcH 不客气。 (是的,因为您只向strtotime() 提供时间,它只会使用当前日期来创建时间戳)
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多