PHP - 将 mysql 时间戳转换为显示网格
PHP - Turn mysql time-stamps into display grid
我很纠结这个问题。
我有一个充满 "reservations" 的 MySQL 数据库,我正在尝试构建一个网格来显示约会的可用性。
对于每个条目,我都有一个开始时间和结束时间,格式如下:
YYYY-MM-DD HH:MM:SS(即 2015-06-17 12:00:00)。
我正在寻找将这些条目变成当天显示网格的方法,其中预订时间被遮挡(用一种颜色),非预订时间用不同颜色遮挡。
示例:如果我的 sql 查询返回一个条目,开始时间为下午 12 点,结束时间为下午 2 点,则创建的网格将如下所示:
不好的例子,但理解了这个想法。
我会包括我尝试过的例子,但老实说,我不知道从哪里开始来完成这个。 - 我可以轻松地提取数据,让它像我的例子一样显示出来,这让我卡住了。
我不是在寻找完成的代码或任何人为我做我的工作,只是朝着正确的方向推动如何将时间变成像我的例子一样的东西。
非常感谢!
您似乎想要呈现预订时间网格。好的,我们走吧。
- 我将从定义可能的预订时间开始。
- 然后我会检查请求:用户请求一周还是一天。
在示例中,我使用了周视图。
- 然后
render_reservation_table()
一周(或一天)使用定义的预订时间并在迭代这些时间时,询问您的数据库,如果此 week/day/time 有一个条目 read_reservation()
.
- 如果存在一个条目:将其渲染(细节)并着色为红色,否则将 "Click to book" 渲染为绿色。
关键是渲染数据和数据库数据的对比。
根据渲染数据(周、日、时间)查询数据库。
你已经写了你"can easily pull the data"。您将使用渲染数据构建时间戳,然后查询数据库中的条目(或条目):
SELECT * FROM events WHERE `date` BETWEEN '2015-01-01 09:00:01' AND '2015-01-01 11:59:59'
有很多方法可以改进这一点。特别是 read_reservation()
函数稍后将包含数据库 select 查询。您可以在第一次调用该函数时查询一天或一周,而不是在渲染期间再次调用该函数时处理数据和时间查找的结果集。
这应该让你开始:
<?php
// (1) Define the possible reservation times. Syntax: 'TimeStart-TimeEnd'
$reservation_times = ['09-10', '10-11', '11-12', '12-13', '13-14', '14-15', '15-16', '16-17'];
// (2) What is the request?
// Week Display / Day display - $week = $_GET['week'];
// Hardcoded for demo purpose.
$week = 20;
/**
* Renders a reservation table for a certain week
*/
function render_reservation_table($week, $reservation_times)
{
echo '<table><colgroup span="1" id="reservation_time_colgroup"></colgroup><colgroup span="7" id="reservation_day_colgroup"></colgroup>';
foreach($reservation_times as $time)
{
echo '<tr><th class="reservation_time_th">' . $time . '</th>';
$i = 0;
while($i < 7)
{
$i++;
echo '<td><div class="reservation_time_div">';
echo '<div class="reservation_time_cell_div" id="div:' . $week . ':' . $i . ':' . $time . '" onclick="void(0)">';
echo read_reservation($week, $i, $time);
echo '</div></div></td>';
}
echo '</tr>';
}
echo '</table>';
}
function read_reservation($week, $i, $time)
{
// ==> ask database and compare
// here hardcoded for demo: this is week 20, day 2, time 10-11
if($week === 20 && $i === 2 && $time === '10-11') {
// Booked
echo '<div style="background:red;">Already booked.</div>';
} else {
// Not booked.
echo '<div style="background:lightgreen;">Click to book.</div>';
}
}
render_reservation_table($week, $reservation_times);
看起来像这样(周视图):
我很纠结这个问题。 我有一个充满 "reservations" 的 MySQL 数据库,我正在尝试构建一个网格来显示约会的可用性。
对于每个条目,我都有一个开始时间和结束时间,格式如下: YYYY-MM-DD HH:MM:SS(即 2015-06-17 12:00:00)。
我正在寻找将这些条目变成当天显示网格的方法,其中预订时间被遮挡(用一种颜色),非预订时间用不同颜色遮挡。
示例:如果我的 sql 查询返回一个条目,开始时间为下午 12 点,结束时间为下午 2 点,则创建的网格将如下所示:
不好的例子,但理解了这个想法。
我会包括我尝试过的例子,但老实说,我不知道从哪里开始来完成这个。 - 我可以轻松地提取数据,让它像我的例子一样显示出来,这让我卡住了。
我不是在寻找完成的代码或任何人为我做我的工作,只是朝着正确的方向推动如何将时间变成像我的例子一样的东西。
非常感谢!
您似乎想要呈现预订时间网格。好的,我们走吧。
- 我将从定义可能的预订时间开始。
- 然后我会检查请求:用户请求一周还是一天。 在示例中,我使用了周视图。
- 然后
render_reservation_table()
一周(或一天)使用定义的预订时间并在迭代这些时间时,询问您的数据库,如果此 week/day/time 有一个条目read_reservation()
. - 如果存在一个条目:将其渲染(细节)并着色为红色,否则将 "Click to book" 渲染为绿色。
关键是渲染数据和数据库数据的对比。 根据渲染数据(周、日、时间)查询数据库。 你已经写了你"can easily pull the data"。您将使用渲染数据构建时间戳,然后查询数据库中的条目(或条目):
SELECT * FROM events WHERE `date` BETWEEN '2015-01-01 09:00:01' AND '2015-01-01 11:59:59'
有很多方法可以改进这一点。特别是 read_reservation()
函数稍后将包含数据库 select 查询。您可以在第一次调用该函数时查询一天或一周,而不是在渲染期间再次调用该函数时处理数据和时间查找的结果集。
这应该让你开始:
<?php
// (1) Define the possible reservation times. Syntax: 'TimeStart-TimeEnd'
$reservation_times = ['09-10', '10-11', '11-12', '12-13', '13-14', '14-15', '15-16', '16-17'];
// (2) What is the request?
// Week Display / Day display - $week = $_GET['week'];
// Hardcoded for demo purpose.
$week = 20;
/**
* Renders a reservation table for a certain week
*/
function render_reservation_table($week, $reservation_times)
{
echo '<table><colgroup span="1" id="reservation_time_colgroup"></colgroup><colgroup span="7" id="reservation_day_colgroup"></colgroup>';
foreach($reservation_times as $time)
{
echo '<tr><th class="reservation_time_th">' . $time . '</th>';
$i = 0;
while($i < 7)
{
$i++;
echo '<td><div class="reservation_time_div">';
echo '<div class="reservation_time_cell_div" id="div:' . $week . ':' . $i . ':' . $time . '" onclick="void(0)">';
echo read_reservation($week, $i, $time);
echo '</div></div></td>';
}
echo '</tr>';
}
echo '</table>';
}
function read_reservation($week, $i, $time)
{
// ==> ask database and compare
// here hardcoded for demo: this is week 20, day 2, time 10-11
if($week === 20 && $i === 2 && $time === '10-11') {
// Booked
echo '<div style="background:red;">Already booked.</div>';
} else {
// Not booked.
echo '<div style="background:lightgreen;">Click to book.</div>';
}
}
render_reservation_table($week, $reservation_times);
看起来像这样(周视图):