如何在日历中默认显示月份事件而不是当前月份?

时间:2015-04-12 04:32:12

标签: php mysql calendar

我的数据库包含 event_date 主题 说明列> 在我的mysql表中。 目前,我使用以下代码显示日历以突出显示事件的日期,并点击该特定日期,显示说明..

但是使用此代码,在页面加载时,它会显示默认的当前月份。而不是我想要显示下一个月安排哪个事件。

您可以访问this link以查看...此处显示4月当前月份,在选择5月份之后,它会显示事件..然后在6月没有事件...但是在7月。 所以我想在2015年5月至5月28日期间显示日历,然后它应该显示7月而不是6月,因为6月份没有安排活动。

现行守则如下:

<?php
date_default_timezone_set('Asia/kolkata');

error_reporting(0);
include("config.php");

 /// get current month and year and store them in $cMonth and $cYear variables
if($_REQUEST["month"]>0){
    $cMonth = "0".intval($_REQUEST["month"]);
if ($_REQUEST["month"]>9) {
    $cMonth = intval($_REQUEST["month"]);
}
    $cYear = intval($_REQUEST["year"]);
}else
{
    $cMonth = date("m");
    $cYear = date("Y");
}

  // generate an array with all dates with events
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE `event_date` LIKE '".$cYear."-".$cMonth."-%'";
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);

while ($row = mysql_fetch_assoc($sql_result)) {
    $events[$row["event_date"]]["subject"] = $row["subject"];
    $events[$row["event_date"]]["description"] = $row["description"];
}

// calculate next and prev month and year used for next / prev month navigation links and store them in respective variables
$prev_year = $cYear;
$next_year = $cYear;
$prev_month = intval($cMonth)-1;
$next_month = intval($cMonth)+1;

// if current month is December or January month navigation links have to be updated to point to next / prev years
if ($cMonth == 12 ) {
    $next_month = 1;
    $next_year = $cYear + 1;
} elseif ($cMonth == 1 ) {
    $prev_month = 12;
    $prev_year = $cYear - 1;
}

if ($prev_month<10) $prev_month = '0'.$prev_month;
if ($next_month<10) $next_month = '0'.$next_month;
?>

  <table width="100%">
  <tr>
     <td class="mNav"><a href="javascript:LoadMonth('<?php echo $prev_month; ?>', '<?php echo $prev_year; ?>')">&lt;&lt;</a></td>
     <td colspan="5" class="cMonth"><?php echo date("F, Y",strtotime($cYear."-".$cMonth."-01")); ?></td>
     <td class="mNav"><a href="javascript:LoadMonth('<?php echo $next_month; ?>', '<?php echo $next_year; ?>')">&gt;&gt;</a></td>
  </tr>
  <tr>
    <td class="wDays">Sun</td>
    <td class="wDays">Mon</td>
    <td class="wDays">Tue</td>
    <td class="wDays">Wed</td>
    <td class="wDays">Thu</td>
    <td class="wDays">Fri</td>
    <td class="wDays">Sat</td>
    </tr>
<?php 
    $first_day_timestamp = mktime(0,0,0,$cMonth,1,$cYear); // time stamp for  first day of the month used to calculate 
    $maxday = date("t",$first_day_timestamp); // number of days in current month
    $thismonth = getdate($first_day_timestamp); // find out which day of the week the first date of the month is
    $startday = $thismonth['wday'] ; // 0 is for Sunday and as we want week to start on Mon we subtract 1

for ($i=0; $i<($maxday+$startday); $i++) {

    if (($i % 7) == 0 ) echo "<tr>";

    if ($i < $startday) { echo "<td>&nbsp;</td>"; continue; };

    $current_day = $i - $startday + 1;
    if ($current_day<10) $current_day = '0'.$current_day;

 // set css class name based on number of events for that day
   if ($events[$cYear."-".$cMonth."-".$current_day]<>'') {
        $css='withevent';
        $click = "onclick=\"LoadEvents('".$cYear."-".$cMonth."-".$current_day."')\"";
    } else {
        $css='noevent';         
        $click = '';
    }

    echo "<td class='".$css."'".$click.">". $current_day . "</td>";

    if (($i % 7) == 6 ) echo "</tr>";
}
?> 
</table>

1 个答案:

答案 0 :(得分:0)

我发现解决方案如下:

<?
date_default_timezone_set('Asia/kolkata');

error_reporting(0);
include("config.php");

$ceYear=date("Y");
$ceMonth=date("m");
$sqlevent = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE YEAR(`event_date`) >= ".$ceYear." AND MONTH(`event_date`) >= ".$ceMonth."  ";

$sql_resultevent = mysql_query ($sqlevent, $connection ) or die ('request "Could not execute SQL query" '.$sqlevent);
$rowevent = mysql_fetch_array($sql_resultevent);


/// get current month and year and store them in $cMonth and $cYear variables
if($_REQUEST["month"]>0){
    $cMonth = "0".intval($_REQUEST["month"]);
if ($_REQUEST["month"]>9) {
    $cMonth = intval($_REQUEST["month"]);
}
$cYear = intval($_REQUEST["year"]);
}else
{
$cMonth = date("m", strtotime($rowevent["event_date"]));
$cYear = date("Y", strtotime($rowevent["event_date"]));
}

// generate an array with all dates with events
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE YEAR(`event_date`) >= ".$cYear." AND MONTH(`event_date`) >= ".$cMonth."  ";
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
while ($row = mysql_fetch_assoc($sql_result)) {
  $events[$row["event_date"]]["title"] = $row["title"];
  $events[$row["event_date"]]["description"] = $row["description"];
}

    // calculate next and prev month and year used for next / prev month navigation links and store them in respective variables
  $prev_year = $cYear;
  $next_year = $cYear;
  $prev_month = intval($cMonth)-1;
  $next_month = intval($cMonth)+1;

   // if current month is December or January month navigation links have to be updated to point to next / prev years
  if ($cMonth == 12 ) {
   $next_month = 1;
   $next_year = $cYear + 1;
} elseif ($cMonth == 1 ) {
   $prev_month = 12;
   $prev_year = $cYear - 1;
}

 if ($prev_month<10) $prev_month = '0'.$prev_month;
 if ($next_month<10) $next_month = '0'.$next_month;
 ?>
  <table width="100%">
   <tr>
     <td class="mNav"><a href="javascript:LoadMonth('<?php echo $prev_month; ?>', '<?php echo $prev_year; ?>')">&lt;&lt;</a></td>
     <td colspan="5" class="cMonth"><?php echo date("F, Y",strtotime($cYear."-".$cMonth."-01")); ?></td>
     <td class="mNav"><a href="javascript:LoadMonth('<?php echo $next_month; ?>', '<?php echo $next_year; ?>')">&gt;&gt;</a></td>
 </tr>
 <tr>
    <td class="wDays" style="background-color:#c90404; color:#FFFFFF;">Sun</td>
    <td class="wDays">Mon</td>
    <td class="wDays">Tue</td>
    <td class="wDays">Wed</td>
    <td class="wDays">Thu</td>
    <td class="wDays">Fri</td>
    <td class="wDays">Sat</td>
 </tr>
<?php 
  $first_day_timestamp = mktime(0,0,0,$cMonth,1,$cYear); // time stamp for first day of the month used to calculate 
  $maxday = date("t",$first_day_timestamp); // number of days in current month
  $thismonth = getdate($first_day_timestamp); // find out which day of the week the first date of the month is
  $startday = $thismonth['wday'] ; // 0 is for Sunday and as we want week to start on Mon we subtract 1

   for ($i=0; $i<($maxday+$startday); $i++) {

   if (($i % 7) == 0 ) echo "<tr>";

   if ($i < $startday) { echo "<td>&nbsp;</td>"; continue; };

  $current_day = $i - $startday + 1;
   if ($current_day<10) $current_day = '0'.$current_day;

// set css class name based on number of events for that day
   if ($events[$cYear."-".$cMonth."-".$current_day]<>'') {
    $css='withevent';
    $click = "onclick=\"LoadEvents('".$cYear."-".$cMonth."-".$current_day."')\"";
   } else {
     $css='noevent';         
     $click = '';
   }

   echo "<td class='".$css."'".$click.">". $current_day . "</td>";

   if (($i % 7) == 6 ) echo "</tr>";
   }
?> 
</table>