Php 在每个月的开始/结束时显示占位空间的日历(月日、星期日)
我在mySQL表中设置了一个日历,我试图通过月历1月、2月、3月输出日期,这说明了前几个月和下个月缺少的天数 因此,如果我试图为2013年1月制作一个日历,而1月1日正好是星期二,那么我很难编写一个方法来显示12月30日的太阳和12月31日的周一作为空间填充物,或者你做了什么。。。知道我的意思吗 我很难理解如何输出这些信息 数据结构和数据如下所示: 表名称:附表日历表 我计划使用表格创建每个月历 因此,代码的初始部分是:Php 在每个月的开始/结束时显示占位空间的日历(月日、星期日),php,mysql,calendar,Php,Mysql,Calendar,我在mySQL表中设置了一个日历,我试图通过月历1月、2月、3月输出日期,这说明了前几个月和下个月缺少的天数 因此,如果我试图为2013年1月制作一个日历,而1月1日正好是星期二,那么我很难编写一个方法来显示12月30日的太阳和12月31日的周一作为空间填充物,或者你做了什么。。。知道我的意思吗 我很难理解如何输出这些信息 数据结构和数据如下所示: 表名称:附表日历表 我计划使用表格创建每个月历 因此,代码的初始部分是: echo '<table>'; $sql="SELECT *
echo '<table>';
$sql="SELECT * FROM sched_calendar_table WHERE y=2013";
$result=mysql_query($sql);
while($row=mysql_query($result)){
echo '<tr><td>'; // .. unsure how to account for the placeholder days that aren't part of the month being displayed... how to do this?
}
echo '</table>';
快速函数,按周返回所有日期,从星期一开始,到星期天结束,即使这些日期是在月份之后/之前
function getWeekDays($month, $year)
{
$dFrom = new DateTime("$year-$month-01");
$dTo = clone $dFrom;
if (($N = $dFrom->format('N')) > 1) {
$dFrom->modify('-' . ($N - 1) . ' day');
}
$dTo->add(new DateInterval('P1M'));
if (($N = $dTo->format('N')) < 7) {
$dTo->modify((8 - $N) . ' day');
}
$p = new DatePeriod($dFrom, new DateInterval('P1D'), $dTo);
$datesByWeek = array();
foreach ($p as $d) {
$datesByWeek[ $d->format('W') ][] = $d;
}
return $datesByWeek;
}
现在您有了表示当前月份的所有日期,所以您可以使用DB magic
如何从这些数据输出表,请参见>我已经回答了一些类似的问题>mysql扩展已经过时,不再维护,并且将被标记为不推荐使用PHP5.5。改用PDO_MYSQL或MySQLi。看见它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,感谢您的快速回复。我有PHP版本5.2.6。。。但是我得到了一个致命的错误:调用未定义的方法DateTime::createfromformat in。。。第36行。。我试着把它转换成$dFrom=DateTime::createFromFormat'Y-n-dh',$year.-.$month.-01 00;但仍然是一个错误是的,代码用于>=5.4版本。我更新了它,所以现在它应该适用于您的版本。
function getWeekDays($month, $year)
{
$dFrom = new DateTime("$year-$month-01");
$dTo = clone $dFrom;
if (($N = $dFrom->format('N')) > 1) {
$dFrom->modify('-' . ($N - 1) . ' day');
}
$dTo->add(new DateInterval('P1M'));
if (($N = $dTo->format('N')) < 7) {
$dTo->modify((8 - $N) . ' day');
}
$p = new DatePeriod($dFrom, new DateInterval('P1D'), $dTo);
$datesByWeek = array();
foreach ($p as $d) {
$datesByWeek[ $d->format('W') ][] = $d;
}
return $datesByWeek;
}
print_r( getWeekDays(1, 2013) );