【问题标题】:Unset Variables from array where Datetime is greater than从日期时间大于的数组中取消设置变量
【发布时间】:2016-03-29 13:32:05
【问题描述】:

所以我一直在尝试解决这个问题,问题是我有一个数组

$time=array("10:00 AM","11:00 AM","12:00 PM","1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM");

问题是,如果现在的时间大于数组中的值,我正在尝试删除数组的变量,然后从数组中删除值,否则将其保留在那里并继续到下一个位置

这是我迄今为止尝试过的

$tz_object = new DateTimeZone('America/New_York');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
$datetime->format('g:i A');

$i=0;
while($i<= count($time)){
    if ($datetime> '12:00 PM') {
      echo "take off time from the array";
    }

    $i++;
}

我应该在我的数组中得到这样的结果

$time=array("1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM");

【问题讨论】:

  • 首先,$datetime 是一个对象,而不是格式化的时间。
  • 时间被格式化,最终会变成$datetime="9:39 AM"
  • 那将是$datetime-&gt;format('g:i A') 的返回值,而不是$datetime 的值。

标签: php arrays datetime time


【解决方案1】:

您需要实际检索格式化的日期。

$current = $datetime->format('g:i A');

然后在循环内部,你可以使用 strtotime 将每个转换为整数:

if ( strtotime($current) > strtotime($time[$i]) ) {
    unset($time[$i]);
} 

【讨论】:

  • 感谢您的回答正是我所需要的
【解决方案2】:
<?php

$time=array("10:00 AM","11:00 AM","12:00 PM","1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM");

$tz_object = new DateTimeZone('America/New_York');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);


//$now = "12:01";
$now = $datetime->format('H:i');


$i=0;
while($i< count($time)){

     $compare = date("H:i", strtotime($time[$i] ));

    if ($now > $compare ) {
      echo "take off time from the array<br />";
      unset($time[$i]);   
    }
    else {
     echo $now ." < ". $compare . "<br />";
    }

    $i++;
}

print_r($time);

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 1970-01-01
    • 2016-07-04
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多