0

我正在尝试获取我的时间,如果该时间介于数组中的值之间,则会加载不同的值,因此如果我的时间是 4:15,则会显示不同的数组,因为它介于 4:10 和 4:39 之间

date_default_timezone_set("America/New_York");
$times = array(1 =>"12:00", 2 => "12:05", 3 =>"13:00", 4 => "13:05", 5 =>"14:00", 6 => "14:05", 7 =>"16:10", 8 => "16:39");
$mytime = date("Gi");
echo $mytime;

foreach ($times as $time)
{

if ($mytime >= date("Gi", strtotime($time)) && $mytime <= date("Gi", strtotime($time)))
{
$arguments = [
  'cond1',
  'cond2',
  'cond3',
  'cond4'
];
echo "<br />";
echo date("Gi", strtotime($time));
}
else
{
   $arguments = [
    'cond1',
    'cond2',
    'cond3'
      ];
      echo "<br />";
      echo date("Gi", strtotime($time));

}

}
4

2 回答 2

1

@Usacoder,

您在 中比较同一时间if (),因为$time变量在 的每次迭代中都是相同的foreach

要解决这个问题,您需要考虑:

a) 弄清楚您需要比较时间,即$from_time$from_time

b)如何从数组中获取它们?他们的索引应该是什么?

c) 问问自己哪个循环语句更好地做到这一点?

date_default_timezone_set("America/New_York");
$times = array(1 =>"12:00", 2 => "12:05", 3 =>"13:00", 4 => "13:05", 5 =>"14:00", 6 => "14:05", 7 =>"16:10", 8 => "20:39");
$mytime = date("Gi");
echo " My time: $mytime <br />" . PHP_EOL;;

for ($i = 1; $i < count($times); $i++)
{
    $from_time = date("Gi", strtotime($times[$i]));
    $to_time   = date("Gi", strtotime($times[$i + 1]));

    if ($mytime >= $from_time && $mytime <= $to_time)
    {
        echo "Is between $from_time to $to_time <br />" . PHP_EOL;
    }
    else
    {
        echo "Isn't between $from_time to $to_time <br />" . PHP_EOL;
    }
}
于 2020-06-11T23:08:21.673 回答
0

你的情况是这样的:

$a >= $b && $a <= $b

...等于:

$a == $b

要进行适当的比较,您需要生成具有不同下限和上限值的区间。

此外,由于您的时间并没有真正绑定到日期,您可以自己进行计算:

  1. 解析时间字符串:

    [$h, $m] = explode(':', '13:05');
    
  2. 转换为单个单位(例如分钟):

    $minutes = 60 * $h + $m;
    
  3. 与良好的旧比较运算符进行比较。

将所有内容放在一起(为简洁起见省略了错误检查,为清楚起见重复调用timeToMinutes()):

function timeToMinutes(string $time): int
{
    [$h, $m] = explode(':', $time);
    return 60 * $h + $m;
}

$times = [1 => '12:00', '12:05', '13:00', '13:05', '14:00', '14:05', '16:10', '16:39'];
$mytime = date('G:i');

$start = null;
foreach ($times as $time) {
    if ($start !== null) {
        $end = $time;
        if (timeToMinutes($mytime) >= timeToMinutes($start) && timeToMinutes($mytime) <= timeToMinutes($end)) {
            echo "$mytime is between $start and $end\n";
            break;
        }
    }
    $start = $time;
}
于 2020-06-14T12:04:47.690 回答