【问题标题】:PHP time scriptPHP时间脚本
【发布时间】:2014-08-30 05:15:48
【问题描述】:

我有以下功能

function status($open, $lunch, $close)
{
 if(date('H') < $open || date('H') > $close)
 {
  $GLOBALS['status'] = "Closed";
  $GLOBALS['color'] = "rgba(255,0,0,1)";
 }
 elseif(date('H') == ($close-1))
 {
  if(date('i') > 29)
  {
   $GLOBALS['status'] = "Closing";
   $GLOBALS['color'] = "rgba(255,255,0,1)";
  }
  else
  {
   $GLOBALS['status'] = "Open";
   $GLOBALS['color'] = "rgba(0,255,0,1)";
  }
 }
 else
 {
  if(date('H') == $lunch)
  {
   $GLOBALS['status'] = "Lunch";
   $GLOBALS['color'] = "rgba(0,0,255,1)";
  }
  else
  {
   $GLOBALS['status'] = "Open";
   $GLOBALS['color'] = "green";
  }
 }
}

晚上 10:00 之后它应该返回关闭状态,现在是 10:13 并且它仍然返回打开状态,我查看了代码,似乎找不到问题。

有人可以看看我的代码哪里出错了吗?

【问题讨论】:

  • 10:00PM,你在关闭时输入了22
  • 当我调用该函数时,它被写入 status(10,12,22)。但由于某种原因,它正在注册最后的 else 语句。
  • 你的 php 服务器在哪个时区?可能需要调整时区或夏令时。
  • @GaryHayes 时区是正确的,当我让服务器返回时间时,它会返回我期望的时间
  • 嵌套 if else 语句看起来有问题

标签: php arrays datetime


【解决方案1】:

尝试在关闭时使用&gt;=

if(date('H') < $open || date('H') >= $close)
{
    $GLOBALS['status'] = "Closed";
    $GLOBALS['color'] = "rgba(255,0,0,1)";
}

发生的事情是您设置了10:00 PM,即22。如果当前时间是10:13,它仍然不大于22。这就是为什么它确实不符合条件。应该大于等于,则关闭。

【讨论】:

  • 我最初写脚本的时候已经把等号放在了,但是当我今天下午编辑它时,我一定把它删除了。感谢您指出我的错误
【解决方案2】:

试试这个

function status($open, $lunch, $close)
{
    $hour = date('H');
    $minute = date('i');

    if($hour < $open ||  $hour >= $close)
    {
        $GLOBALS['status'] = "Closed";
        $GLOBALS['color'] = "rgba(255,0,0,1)";
    }
    else if($hour==$lunch)
    {
        $GLOBALS['status'] = "Lunch";
        $GLOBALS['color'] = "rgba(0,0,255,1)";
    }
    else
    {
        $GLOBALS['status'] = "Open";
        $GLOBALS['color'] = "green";
    }

    if($hour == ($close-1) && $minute>29)
    {
        $GLOBALS['status'] = "Closing";
        $GLOBALS['color'] = "rgba(255,255,0,1)";
    }
}

注意:还可以设置您的默认时区,例如

date_default_timezone_set('your timezone');
//example
date_default_timezone_set('Asia/Kolkata');

【讨论】:

    【解决方案3】:

    确保您设置了正确的时区,

    date_default_timezone_set('Asia/Colombo');
    

    php支持的时区列表见here

    【讨论】:

    • 时区在我的服务器上的 .user.ini 文件中设置为美国/温哥华
    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2011-05-27
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多