0

我需要在上午 05:30 之后更改 shiftdate 变量。因为我需要从上午 05:31 到第二天上午 05:30 生成过去 24 小时的数据。我试过这样,但每次都给前一天。请帮忙。

我希望 $shiftdate 在我的 sql 查询中使用;

代码:

<?php
    if(date('H:i')>="00:00" || date('H:i')<"05:30"){
                      $shiftdate=  date('Y-m-d',strtotime(date('Y-m-d'))-24*60*60);

                  }
                  else if(date('H:i')>"05:30" || date('H:i')<"00:00")
                  {
                      $shiftdate=date('Y-m-d');
                  }

                  echo $shiftdate; 
?>
4

2 回答 2

0

您可以为此使用DateTime类并将您的检查封装到一个函数中:-

/**
 * @param DateTime $checkTime
 * @return string
 */
function getShiftDate(DateTime $checkTime)
{
    $shiftDate = (new DateTime())->setTimestamp($checkTime->getTimestamp());
    $hours = (int)$checkTime->format('H');
    $minutes = (int)$checkTime->format('i');
    $totalMins = $hours * 60 + $minutes;
    if($totalMins < 330){
        $shiftDate->modify('yesterday');
    }
    return $shiftDate->format('Y-m-d');
}

var_dump(getShiftDate(new DateTime()));

显然,函数的输入可能需要修改,因为我不知道您如何获得日期/时间,但这不会成为问题。如果您需要帮助,请发表评论。

于 2013-06-09T13:44:12.337 回答
0
  1. 您不能只将“05:30”之类的字符串作为数字进行比较,并希望获得最好的结果。您需要比较小时的数值和分钟的数值。

  2. if你在第一和第一之间有一场比赛else if

  3. else if没有完全覆盖它,所以如果它击中了甜蜜点,你最终可能会$shiftdate是 NULL。

  4. 使用 protoype 使它成为一个函数shiftdate_type_whatever_it_is fn_name(int hour, int minute);。这样,您可以简单地对函数的不同(思考边界)值进行单元测试date("H:i");

于 2013-06-09T12:55:55.587 回答