我正在用PHP创建一个日历,并且我有一个for循环31天(或取决于当月的天数),每天都用$ listDay写出来。
在我的MySQL数据库中,我有一个名为'eventDate'的字段,带有一个unix时间戳,我有一个变量$ event_day,它是从当天的时间戳开始构建的。我无法弄清楚如何写一个查询“如果$ listDay == $ event_day然后显示这个”。这段代码可能有点乱,因为我一直在玩一堆选项。
这应该做的是,如果当天有一个事件,用一个链接替换标准号码,如果moused将显示该事件的一个小弹出窗口(在js中处理,我确实有弹出窗口正常工作)
我知道MySQL语句的方式有问题,但我无法弄明白。哦是的,我在数据库中创建了一个名为'eventMonth'的字段,因为我无法想象如何使查询'匹配'一个月与时间戳。
$month = date("F");
$vmonth = date("n");
$current_month = date("n"); //value will change if the user changes the month they are viewing
$current_year = date('Y');
$theday = date(w, mktime(0, 0, 0, $current_month, 1, $current_year));
$daysinmonth = date("t", mktime(0, 0, 0, $current_month, 1, $current_year));
echo "<table bgcolor=\"#C68282\" style=\"border: #990000 1px solid; font-size:8pt; font-family: Tahoma; color: #000000\" cellpadding=\"1\" cellspacing=\"0\" width=\"129\">";
echo "<tr>
<td colspan=7 align=center style=\"font-weight: bold;\">".date('F Y', mktime(0, 0, 0, $current_month, 1, $current_year))."</td>
</tr>";
echo "<tr style=\"background-color: 990000; color: white;\">";
echo "<td align=center>S</td>";
echo "<td align=center>M</td>";
echo "<td align=center>T</td>";
echo "<td align=center>W</td>";
echo "<td align=center>T</td>";
echo "<td align=center>F</td>";
echo "<td align=center>S</td>";
echo "</tr>";
echo "<tr>";
for ($i=0;$i<$theday;$i++)
{
echo "<td> </td>";
}
$query = "SELECT * FROM calendar WHERE eventMonth = '77'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
for ($list_day=1;$list_day<=$daysinmonth;$list_day++)
{
$event_day = date('j',$row['eventDate']);
echo "<td align=\"center\">";
if($list_day == $event_day) {
echo "<a href=\"#\" class=\"cal\">";
echo $list_day . "<span class\"cal\"><div style=\"border-bottom: 1px solid #999999; padding: 2px; \">" . $month ." ". $list_day .", ". $current_year ." </div><div style=\"padding: 2px;\">" . $row['event'] ."</div></span></a></td>";
} else {
echo $list_day;
}
if ($theday == 6)
{
echo "</tr>";
echo "<tr>";
$theday = -1;
}
$theday++;
}
echo "</tr>";
echo "</table>";
答案 0 :(得分:2)
使用MySQL的DATE_FORMAT:
SELECT * FROM calendar WHERE DATE_FORMAT(timestamp, '%Y-%m-%d') = '2009-12-11';
但如果您每天都在查询数据库,那么您正在执行30个不需要的查询。在一个查询中提前获取所有事件然后从这些事件构建数组会更明智,如下所示:
// Get all events for December 2009
$q = mysql_query("SELECT
DATE_FORMAT(timestamp, '%d') AS day,
event_title
FROM
calendar
WHERE
DATE_FORMAT(timestamp, '%Y-%m') = '2009-12'");
$events = array();
// Loop through the results and put events in array
while($row = mysql_fetch_array($q)) {
$events[$row['day']][] = $row['event_title'];
}
现在$events
包含按当天编制索引的月份的每个事件,当您打印日历时,您可以使用以下方式获取当天的事件数量:
for($d = 1; $d <= 31; $d++) {
if(isset($events[$d])) {
echo count($events[$d])." events!";
} else {
echo "No events.";
}
}
答案 1 :(得分:2)
只需使用字符串 - mysql将其转换
select * from test_time_table where the_time = '2009-12-09';
获取日期活动
select * from test_time_table where the_time between '2009-12-09 00:00:00' and '2009-12-09 23:59:59';
说真的 - 不要使用DATE_FORMAT。它不仅会使mysql执行不必要的步骤,还会阻止查询进入查询缓存。
编辑 - 您将字段存储为TIMESTAMP,对吗?