Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在每个月的开始/结束时显示占位空间的日历(月日、星期日)_Php_Mysql_Calendar - Fatal编程技术网

Php 在每个月的开始/结束时显示占位空间的日历(月日、星期日)

Php 在每个月的开始/结束时显示占位空间的日历(月日、星期日),php,mysql,calendar,Php,Mysql,Calendar,我在mySQL表中设置了一个日历,我试图通过月历1月、2月、3月输出日期,这说明了前几个月和下个月缺少的天数 因此,如果我试图为2013年1月制作一个日历,而1月1日正好是星期二,那么我很难编写一个方法来显示12月30日的太阳和12月31日的周一作为空间填充物,或者你做了什么。。。知道我的意思吗 我很难理解如何输出这些信息 数据结构和数据如下所示: 表名称:附表日历表 我计划使用表格创建每个月历 因此,代码的初始部分是: echo '<table>'; $sql="SELECT *

我在mySQL表中设置了一个日历,我试图通过月历1月、2月、3月输出日期,这说明了前几个月和下个月缺少的天数

因此,如果我试图为2013年1月制作一个日历,而1月1日正好是星期二,那么我很难编写一个方法来显示12月30日的太阳和12月31日的周一作为空间填充物,或者你做了什么。。。知道我的意思吗

我很难理解如何输出这些信息

数据结构和数据如下所示:

表名称:附表日历表

我计划使用表格创建每个月历

因此,代码的初始部分是:

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) );