我试图找出设计“7天日历”的最佳方法,该日历将包含一个HTML表格,其中包含“名称,星期日,星期一,星期二,星期三,星期四,星期五,星期六”列。 HTML表格行将填充我数据库中的数据,即。名字将有一个人姓名,周日将显示该人在星期日需要做什么,即“刷牙”等等。它与事件日历非常相似,除了我想要完成的不需要每小时视图,只需7天,周日至周六的简单视图。
我的数据库目前包含“Name,EventDetails和EventDate”。
我的HTML表格列包含“名称 - 星期日 - 星期一 - 星期二 - ......”列
我的逻辑:每次加载页面时,脚本都会查询数据库,看看是否有任何EventDate条目等于当前正在查看的一周中的7天之一。如果EventDate匹配,它将自己列在与该日期的相应HTML表列匹配的行中。单击“上周”或“下周”将更改为另一周,并应重新启动脚本,但这次将使用不同的日期列表进行检查。
任何人都愿意分享一些他们能够想出来实现这一目标的例子吗?
这是我到目前为止提出的问题......问题在于,如果一个人下有多个事件,它会为每个事件创建一个新行,而我正在努力将其列入列表每一个事件都在一行中。
<table border='1'>
<tr>
<th>Name</th>
<th>Sunday</th>
<th>Monday</th>
<th>Tuesday</th>
<th>Wednesday</th>
<th>Thursday</th>
<th>Friday</th>
<th>Saturday</th>
</tr>
<?php
function getCurrentWeek()
{
$weekArray = array();
// set the current date
$date = date("m/d/Y"); //'03/08/2011';
$ts = strtotime( $date );
// calculate the number of days since Monday
$dow = date('w', $ts);
$offset = $dow - 0;
if ($offset < 0) $offset = 6;
// calculate timestamp for the Monday
$ts = $ts - $offset*86400;
// loop from Monday till Sunday
for ($i=0; $i<7; $i++, $ts+=86400){
$temp_date = date("Y-m-d", $ts); // Reformat the dates to match the database
array_push( $weekArray, $temp_date );
}
return($weekArray);
}
$currentWeek = getCurrentWeek();
// Loop through the data array
while($row = mysql_fetch_array($result)){
$eventDate= $row['EventDate'];
// Loop through the currentWeek array to match a date from the database from a date in the current week
foreach ($currentWeek as $weekDay){
// If there is a matching date...
if ($eventDate == $weekDay) {
echo "<tr><td>".$row['Name']."</td>";
foreach ($currentWeek as $weekDay2){
if ($eventDate == $weekDay2)
echo "<td>".$row['EventName']."</td>";
else
echo "<td></td>";
}
echo "</tr>";
}
}
}
?>
</table>
答案 0 :(得分:2)
要选择一周,您可以执行类似
的操作set @weekday:= dayofweek(@adate);
set @StartOfWeek:= date_sub(@adate,INTERVAL @weekday DAY);
set @EndOfWeel:= date_add(@adate,INTERVAL (7- @weekday) DAY);
然后选择我要做的那一周
SELECT * FROM TableWithEvents
WHERE TableWithEvents.EventDate
BETWEEN date_sub(@adate,interval @weekday day)
AND date_add(@date,INTERVAL (7-@weekday) DAY);
注意使用
@adate - @weekday
不会工作,必须使用带有愚蠢间隔语法的date_sub / date_add。
它在添加月份时确实工作得很好,它正确地增加了一个月的天数或者它知道闰年的年数(但我离题了)。
对于分页,你可以使用上面的SELECT with limit start,end;像这样:
SELECT * FROM sometable WHERE some_where_thingy LIMIT 0,20;
O并且不要忘记在EventDate
字段中添加索引
我建议在事件表中添加一个名为id
的自动增量主键
这样你就可以唯一地链接到其他表中的特定事件,如:
Table FavEvents:
- id: integer (autoinc primary)
- Event_id: integer (link to your event)
- FanName: varchar(x) (name of user you loves event or what ever)
然后您可以选择“bill”的fav事件:
SELECT * FROM FavEvents
INNER JOIN Events ON (FavEvents.Event_id = Event.id)
WHERE FavEvents.FanName = "bill"
我从不使用PHP,所以无法帮助你,祝你好运。