【发布时间】:2013-03-15 08:47:52
【问题描述】:
我有一项艰巨的任务是显示各个地方的小时数。我想结合时间从一个晚上开始到第二天早上结束的实例。任何人都知道我可以如何修改下面的脚本以使其正常工作?
我有一个如下所示的 MySQL 表:
我当前的 PHP 脚本从表格中输出日期和时间,如下所示:
周一至周四:晚上 11:00 至晚上 11:59
周一至周四:凌晨 12:00 至凌晨 2:00
我希望它看起来像这样:
周一至周四:晚上 11:00 至凌晨 2:00
这是我当前的 PHP 脚本:
<?php
//connection
$day_times = array();
$days_map = array(
'monday' => 'Mon',
'tuesday' => 'Tue',
'wednesday' => 'Wed',
'thursday' => 'Thu',
'friday' => 'Fri',
'saturday' => 'Sat',
'sunday' => 'Sun'
);
$query = mysql_query("SELECT distinct time_group_id, start_time, end_time
FROM times WHERE place_id = '80' ORDER BY id ASC");
while ($row=mysql_fetch_assoc($query)) {
$start_time = stripslashes($row['start_time']);
$end_time = stripslashes($row['end_time']);
$start_time = strtotime("$start_time");
$end_time = strtotime("$end_time");
$day = strtolower($row['day']);
$day_times[$row['time_group_id']][$day][] = $start_time;
$day_times[$row['time_group_id']][$day][] = $end_time;
// within your query while loop
$day_times[$row['time_group_id']]['times'][] = $start_time;
$day_times[$row['time_group_id']]['times'][] = $end_time;
$day_times[$row['time_group_id']]['days'][] = $day;
foreach ($day_times as $timegroup) {
$first_day = array_shift($timegroup['days']);
$last_day = array_pop($timegroup['days']);
$times = $timegroup['times'];
echo $days_map[$first_day] . ' - ' . $days_map[$last_day] . ': ';
echo date('g:ia', min($times));
echo ' to ';
echo date('g:ia', max($times));
echo '<br />';
}
}
?>
目前得到这样的输出:
周一至周六:下午 4:00 至晚上 7:00
周一至周四:晚上 11:00 至晚上 11:59
周一至周四:凌晨 12:00 至凌晨 2:00
【问题讨论】:
-
是否有任何规定,或者您只是在寻找最大和最小日期时间?目前它们不是连续的。 23:00:00 到 23:59:00 然后跳到 00:00:00 并转到 02:00:00。最大值和最小值相当简单,但如果有需要排除的时间,那就有点乏味了。
-
没有必要从 23:59:00 跳到 24:00:00。我宁愿它是连续的,但没有这样设置。有没有更好的方法来设置它以使其连续?
-
正则表达式不是你的朋友。尽可能避免使用它们。
-
你怎么知道时间会继续?他们是否应该有一个匹配的时间组 ID,或者您只是在寻找一个在午夜没有间隙并且接下来的日子?时间会超过几天(即,您可以选择星期一 23:00 - 23:59,然后是星期二 00:00 - 23:59,然后是星期三 00:00 - 02:00)吗?
-
嗨@Kickstart,如果某个时间在一天的 23:59 结束并在第二天的 00:00 开始,则时间将一直持续下去。他们不会持续几天。他们不需要有匹配的组 ID。