如何用PHP H格式编程半小时?

时间:2013-05-13 16:53:57

标签: php datetime-format

我正在查看stackoverflow和谷歌的类似问题,但没有找到适合我的问题的答案。如果我有任何机会让一个重复的问题通过,我仍然很抱歉。如果你好心地指出我的话,请告诉我。

我的问题是我需要编写一个在PHP中以H格式格式化的计划,但现在我需要添加半小时但不知道如何。这是我的代码,所以你可以更好地理解我的意思:

$time = (int)date('H');

if($time>=24 && $time<6)
{
    //some code...
}
else if($time>=6 && $time<18) //My problem is here, I need it to be 18:30
{
    //some other code...
}
//code goes on for rest of hours of the day

我尝试将$ time更改为(int)date('H:i'),但是当我写的时候     if($ time&gt; = 6:00&amp;&amp; $ time&lt; 18:00) 由于':'

,我收到错误

编辑:好的,我尝试了两种方式,这是代码的样子

    date_default_timezone_set('America/Lima');
    if (!isset($timestamp)) {
        $timestamp = time();
    }
    $dw = date( "w", @$timestamp);
    $time = date('HH:ii');

    if($dw>0 && $dw<=4)
    {

        if($time>="00:00" && $time<"04:00")
        {
            $show->current = "A";
            $show->next= "B";
        }
    else if($time>="04:00" && $time<"06:30")
    {
    $show->current = "B";
            $show->next= "C";   
    }
        else if($time>="06:30" && $time<"09:00")
        {
            $show->current = "C";
            $show->next= "D";
        }

它一直持续到00:00再次。问题是这种方式似乎无法在所有日期识别出来,所以如果我编辑当前的C时间从06:00而不是06:30开始,它就不会在我的网站上更新。

    date_default_timezone_set('America/Lima');
    if (!isset($timestamp)) {
        $timestamp = time();
    }
    $dw = date( "w", @$timestamp);
    $time = date('G');


    if($dw>0 && $dw<=4)
       {

        if($time>=0 && $time<4)
        {
            $show->current = "A";
            $show->next= "B";
        }
    else if($time>=4 && $time<6.5)
    {
    $show->current = "B";
            $show->next= "C";   
    }
        else if($time>=6.5 && $time<9)
        {
            $show->current = "C";
            $show->next= "D";
        }

在这里它更新很好,但是它不能识别6.5为6:30,所以当时不是像C节目那样获得当前,我继续得到B.

3 个答案:

答案 0 :(得分:2)

如果您想直接比较半小时时间,则必须将hh:mm转换为数字格式,例如

# 6:45
$hours = 6 + (45 /60); # represent as fractional hours
$minutes = (6 * 60) + 45; # represent in minutes only.

然后您可以直接进行直接比较:

#    6am            6:30pm
if (($hours > 6) && ($hours <= 18.5))
if (($minutes > 360) && ($minutes < 1125))

答案 1 :(得分:1)

您正在将$time转换为整数,这就是它无效的原因 尝试:

$time = date('H:i');     // <-- without the "(int)" part

if (($time >= "00:00") && ($time < "06:00")) {
    //some code...
} else if (($time >= "06:00") && ($time < "18:30") {
    //some other code...
} else {
    //code goes on for rest of hours of the day
}

修改
确保将0到9之间的小时数设为零,例如使用06:...代替6:... (单挑到Marc B)。

<强> EDIT2 : 根据格式字符Hi的{​​{3}}:

#    format
# character   Description                                    Returned values 
#         H   24-hour format of an hour with leading zeros   00 through 23
#         i   Minutes with leading zeros                     00 to 59

因此,预计{$ 1}}到00:00的值在$ time(不是23:59)。

答案 2 :(得分:-1)

H仅返回小时数。您需要使用$ minutes = date(&#39; i&#39;)获得单独的分钟值。使用

将$ minutes添加到您的elseif
if($time>=6 && ($time<19 && $minutes < 30) )

编辑: 正如Marc B指出的那样,如果$ time超过6,少于19但是分钟超过30,例如7:45(有效时间),这将失败。

解决方案应该像专家系统建议的那样。使用日期(&#34;嗨&#34;)或(int)日期(&#34; Gi&#34;);

如果希望使用$ minutes,则应进一步添加OR子句。像

这样的东西
if( $time>=6 && ($time<18 || ($time == 18 && $minutes < 30)) )