1

在这种情况下hours_start将是 08:00:00 和hours_end14:00:00

这是我用来生成开始和结束之间 30 分钟时间段列表的代码

while($row = $q->fetch()){
    $hours = $row['hours_end'] - $row['hours_start']; //amount of hours working in day
    for($i = 0; $i < $hours * 2; $i++){ // double hours for 30 minute increments
        $minutes_to_add = 1800 * $i; // add 30 - 60 - 90 etc.
        $timeslot = date('h:i:s', strtotime($row['hours_start'])+$minutes_to_add);
        echo "
        <tr>
            <td>" . date('h:i A', strtotime($timeslot)) . "</td>
        </tr>";
    }
}

这正在产生:

08:00 AM
08:30 AM
09:00 AM
09:30 AM
10:00 AM
10:30 AM
11:00 AM
11:30 AM
12:00 PM
12:30 PM
01:00 AM
01:30 AM

正如您所看到的,它按(i)预期运行,直到它到达(应该是)下午 1 点,然后它切换回上午。不知道这里发生了什么。

4

2 回答 2

3

这是因为您设置$timeslotusing hwhich is only a 12 hours format without appending amor pm. 然后采用 12 小时格式并运行它strtotime,如果 am 或 pm 不存在,则需要 24 小时格式。因此,12 之后的任何内容都再次变为上午。

你需要使用:

$timeslot = date('H:i:s', strtotime($row['hours_start'])+$minutes_to_add);

或者

$timeslot = date('h:i:s a', strtotime($row['hours_start'])+$minutes_to_add);
于 2013-10-28T17:04:06.860 回答
0

您的日期格式正在使用h而不是H. 小写h12小时格式

改为使用大写H字母 24 小时。

date('H:i A', strtotime($timeslot))
于 2013-10-28T17:05:35.313 回答