0

我查看了 stackoverflow 和 google 的类似问题,但没有找到适合我的问题的答案。如果我让一个重复的问题通过,我仍然很抱歉。拜托,如果你能指点我,我会很感激。

我的问题是我需要在 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>=6:00 && $time<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。

4

3 回答 3

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))
于 2013-05-13T17:32:01.520 回答
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

#    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

因此,期望值 from00:0023:59$time (不是 example 24:00)。

于 2013-05-13T17:02:40.830 回答
-1

H 只返回小时。您将需要使用 $minutes = date('i') 获取单独的分钟值。将 $minutes 添加到您的 elseif 中

if($time>=6 && ($time<19 && $minutes < 30) )

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

解决方案应如专家系统建议的那样。使用 date("Hi") 或 (int) date("Gi");

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

if( $time>=6 && ($time<18 || ($time == 18 && $minutes < 30)) )
于 2013-05-13T16:59:45.157 回答