2016-07-07 7 views
3

Hii私は、7月14日から8月14日のようなカスタム日付からカレンダーを必要とするポータルに取り組んでいます。私は正しく始動するデモを作成しました。 14匹の犬がいる。私はあなたのコードを試してみました私は、ユーザーからの日と終了日を開始しました1つの論理を発見し、両者の間に存在する日付の列を作ったカスタムカスタム日付からカレンダーを表示する

function getCalender($year = '',$month = '') 
{ 
    $startDate = "2016-07-03"; 
    $endDate = "2016-07-31"; 
    $dateYear = ($year != '')?$year:date("Y"); 
    $dateMonth = ($month != '')?$month:date("m"); 
    $date = $dateYear.'-'.$dateMonth.'-01'; 
    $currentMonthFirstDay = date("N",strtotime($date)); 
    $startDateFrom = date("N",strtotime($startDate)); 
    $endDateFrom = date("N",strtotime($endDate)); 
    $timestamp = strtotime($startDate); 
    $dayCount = date("d", $timestamp); 
    $timestamp1 = strtotime($endDate); 
    $dayCountend = date("d", $timestamp1); 

    $totalDaysOfMonth = cal_days_in_month(CAL_GREGORIAN,$dateMonth,$dateYear); 
    $totalDaysOfMonthDisplay = ($currentMonthFirstDay == 7)?($totalDaysOfMonth):($totalDaysOfMonth + $currentMonthFirstDay); 
    //$boxDisplay = ($totalDaysOfMonthDisplay <= 35)?35:42; 
    //$boxDisplay = 29 

?> 


    <div id="calender_section"> 
      <h2> 
       <!--<a href="javascript:void(0);" onclick="getCalendar('calendar_div','<?php echo date("Y",strtotime($date.' - 1 Month')); ?>','<?php echo date("m",strtotime($date.' - 1 Month')); ?>');">&lt;&lt;</a>--> 
       <select name="month_dropdown" class="month_dropdown dropdown"><?php echo getAllMonths($dateMonth); ?></select> 
       <select name="year_dropdown" class="year_dropdown dropdown"><?php echo getYearList($dateYear); ?></select> 
       <!--<a href="javascript:void(0);" onclick="getCalendar('calendar_div','<?php echo date("Y",strtotime($date.' + 1 Month')); ?>','<?php echo date("m",strtotime($date.' + 1 Month')); ?>');">&gt;&gt;</a>--> 
      </h2> 
      <div id="event_list" class="none"></div> 
      <!--For Add Event--> 
      <div id="event_add" class="none"> 
       <p>Add Event on <span id="eventDateView"></span></p> 
       <p><b>Event Title: </b><input type="text" id="eventTitle" value=""/></p> 
       <input type="hidden" id="eventDate" value=""/> 
       <input type="button" id="addEventBtn" value="Add"/> 
      </div> 
      <div id="calender_section_top"> 
       <ul> 
        <li>Mon</li> 
        <li>Tue</li> 
        <li>Wed</li> 
        <li>Thu</li> 
        <li>Fri</li> 
        <li>Sat</li> 
        <li>Sun</li> 
       </ul> 
      </div> 
      <div id="calender_section_bot"> 
       <ul> 
       <?php 

        for($cb=1;$cb<=$dayCountend;$cb++){ 
         //echo $cb; 
         if(($cb >= $startDateFrom) && $cb<=$dayCountend) 
         { 
         /*if(($cb >= $currentMonthFirstDay+1 || $currentMonthFirstDay == 7) && $cb <= ($totalDaysOfMonthDisplay)){*/ 
          //Current date 
          $currentDate = $dateYear.'-'.$dateMonth.'-'.$dayCount; 
          $currentdate = date("D M j",strtotime($currentDate)); 
          $eventNum = 0; 
          //Include db configuration file 
          include 'dbConfig.php'; 
          //Get number of events based on the current date 
          $result = $db->query("SELECT title FROM events WHERE date = '".$currentDate."' AND status = 1"); 
          $eventNum = $result->num_rows; 
          //Define date cell color 
          if(strtotime($currentDate) == strtotime(date("Y-m-d"))){ 
           echo '<li date="'.$currentDate.'" class="grey date_cell">'; 
          }elseif($eventNum > 0){ 
           echo '<li date="'.$currentDate.'" class="light_sky date_cell">'; 
          }else{ 
           echo '<li date="'.$currentDate.'" class="date_cell">'; 
          } 

          //Date cell 
          echo '<span>'; 
          echo $cb; 
          echo '</span>'; 

          //Hover event popup 
          /*echo '<div id="date_popup_'.$currentDate.'" class="date_popup_wrap none">'; 
          echo '<div class="date_window">'; 
          echo '<div class="popup_event">Events ('.$eventNum.')</div>'; 
          echo ($eventNum > 0)?'<a href="javascript:;" onclick="getEvents(\''.$currentDate.'\');">view events</a><br/>':''; 
          //For Add Event 
          echo '<a href="javascript:;" onclick="addEvent(\''.$currentDate.'\');">add event</a>'; 
          echo '</div></div>'; 

          echo '</li>';*/ 
          $dayCount++; 
       ?> 
       <?php }else{ ?> 
        <li><span>&nbsp;</span></li> 
       <?php } } ?> 
       </ul> 
      </div> 
     </div> 


    <?php 
    } 
    ?> 
+0

[email protected] –

答えて

1

をやっていることを見てみましょう。 次に、カレンダーは前から開始する必要があります。 2016年7月3日、私は最初の日まで挿入された日が日曜日です。私は

function getCalender($year = '',$month = '',$startDate = '',$endDate = '') 
{ 
$finalArray = array(); 
    $startDate = "2016-07-03"; 
    $endDate = "2016-08-31"; 
    $date1 = createDateRangeArray('2016-07-03 ','2016-08-31'); 

    //$date = $dateYear.'-'.$dateMonth.'-01'; 

    $startDateFrom = date("N",strtotime($startDate)); 
    $endDateFrom = date("N",strtotime($endDate)); 

    //Take the day from the date 
    $timestamp = strtotime($startDate); 
    $dayCount = date("d", $timestamp); 

    //Take the month from the date 
    $timestampend = strtotime($endDate); 
    $dayCountend = date("d", $timestampend); 

    //Take the month from the date 
    $timestampmonth = strtotime($startDate); 
    $monthstart = date("m", $timestampmonth); 

    //Take the month from the date 
    $timestampmonthend = strtotime($endDate); 
    $monthend = date("m", $timestampmonthend); 

    //Take the year from the start date 
    $yearstart = strtotime($startDate); 
    $yearofStart = date("y", $yearstart); 

    //Take the year from the end date 
    $yearend = strtotime($endDate); 
    $yearofEnd = date("y", $yearend); 

    //cal difference between start date and month 
    $differenceStartDate = $dayCount - 1; 

    //cal difference between end date and month 
    $totalDaysOfMonthEnd = cal_days_in_month(CAL_GREGORIAN,$monthend,$yearofEnd); 
    $totalDaysOfMonthStart = cal_days_in_month(CAL_GREGORIAN,$monthstart,$yearofEnd); 

    if($monthstart == $monthend) 
    { 
     echo "Show one month calendar"; 
    } 
    else 
    { 
     $diffmonth = $monthend-$monthstart; 
    } 

    $differenceStartDate = $dayCountend - $totalDaysOfMonth; 


    for($i=1;$i<$startDateFrom;$i++) 
    { 
     $date[] = '-'; 
    } 
    array_push($date,$date1); 

    for($j=0;$j<count($date);$j++) 
    { 
     if(strlen($date[$j])==1) 
     { 
      array_push($finalArray,$date[$j]); 
     } 
     else 
     { 
      for($k=0;$k<count($date[$j]);$k++) 
      { 
       array_push($finalArray,$date[$j][$k]); 
      } 
     } 
    } 
    print_r($finalArray); 



    $timestamp1 = strtotime($endDate); 
    $dayCountend = date("d", $timestamp1); 

    $now = strtotime($startDate); 
    $your_date = strtotime($endDate); 
    $datediff = $your_date - $now; 
    $diff= floor($datediff/(60*60*24)); 

    $totalDaysOfMonth = cal_days_in_month(CAL_GREGORIAN,$dateMonth,$dateYear); 
    $totalDaysOfMonthDisplay = ($currentMonthFirstDay == 7)?($totalDaysOfMonth):($totalDaysOfMonth + $currentMonthFirstDay); 
    //$boxDisplay = ($totalDaysOfMonthDisplay <= 35)?35:42; 
    $boxDisplay = $diff; 

?> 
    <div id="calender_section"> 
     <h2> 
      <!--<a href="javascript:void(0);" onclick="getCalendar('calendar_div','<?php echo date("Y",strtotime($date.' - 1 Month')); ?>','<?php echo date("m",strtotime($date.' - 1 Month')); ?>');">&lt;&lt;</a>--> 
      <!-- <select name="month_dropdown" class="month_dropdown dropdown"><?php echo getAllMonths($dateMonth); ?></select> 
      <select name="year_dropdown" class="year_dropdown dropdown"><?php echo getYearList($dateYear); ?></select>--> 
      <!--<a href="javascript:void(0);" onclick="getCalendar('calendar_div','<?php echo date("Y",strtotime($date.' + 1 Month')); ?>','<?php echo date("m",strtotime($date.' + 1 Month')); ?>');">&gt;&gt;</a>--> 
     </h2> 
     <div id="event_list" class="none"></div> 
     <!--For Add Event--> 
     <div id="event_add" class="none"> 
      <p>Add Event on <span id="eventDateView"></span></p> 
      <p><b>Event Title: </b><input type="text" id="eventTitle" value=""/></p> 
      <input type="hidden" id="eventDate" value=""/> 
      <input type="button" id="addEventBtn" value="Add"/> 
     </div> 
     <div id="calender_section_top"> 
      <ul> 
       <li>Mon</li> 
       <li>Tue</li> 
       <li>Wed</li> 
       <li>Thu</li> 
       <li>Fri</li> 
       <li>Sat</li> 
       <li>Sun</li> 
      </ul> 
     </div> 
     <div id="calender_section_bot"> 
      <ul> 
      <?php 

       for($cb=0;$cb<count($finalArray);$cb++) 
       { 
        //echo $cb; 
        $date = $finalArray[$cb]; 
        $month = strtotime($date); 
        $month = date("m", $month); 


        if(($cb >= $startDateFrom -1)) 
        { 
        /*if(($cb >= $currentMonthFirstDay+1 || $currentMonthFirstDay == 7) && $cb <= ($totalDaysOfMonthDisplay)){*/ 
         //Current date 
         $currentDate = $finalArray[$cb]; 
         //$currentdate = date("D M j",strtotime($currentDate)); 
         $eventNum = 0; 

         //Include db configuration file 
         //Define date cell color 
         if(strtotime($currentDate) == strtotime(date("Y-m-d"))){ 
          echo '<li date="'.$currentDate.'" class="grey date_cell">'; 
          echo '<select name="select"></select> 
           <option value="0"></option>'; 
         }elseif($eventNum > 0){ 
          echo '<li date="'.$currentDate.'" class="light_sky date_cell">'; 
          echo '<select name="select"></select> 
           <option value="0"></option>'; 
         }else{ 
          echo '<li date="'.$currentDate.'" class="date_cell">'; 
          echo '<select name="select"></select> 
           <option value="0"></option>'; 
         } 

         //Date cell 
         echo '<span>'; 
         echo $currentDate; 
         echo '</span>'; 
         $dayCount++; 
      ?> 
      <?php }else{ ?> 
       <li><span>&nbsp;</span></li> 
      <?php } } ?> 
      </ul> 
     </div> 
    </div> 
<?php 
} 
function createDateRangeArray($strDateFrom,$strDateTo) 
{ 
    // takes two dates formatted as YYYY-MM-DD and creates an 
    // inclusive array of the dates between the from and to dates. 

    // could test validity of dates here but I'm already doing 
    // that in the main script 

    $aryRange=array(); 

    $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),  substr($strDateFrom,8,2),substr($strDateFrom,0,4)); 
    $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),  substr($strDateTo,8,2),substr($strDateTo,0,4)); 

    if ($iDateTo>=$iDateFrom) 
    { 
     array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry 
     while ($iDateFrom<$iDateTo) 
     { 
      $iDateFrom+=86400; // add 24 hours 
      array_push($aryRange,date('Y-m-d',$iDateFrom)); 
     } 
    } 
    return $aryRange; 
} 

?> 

コードを見て、あなたが@BeDeveloperによって与えられた簡単

+0

ありがとうございます –

1

答えはfine.Iが自動的に他のすべての日付を無効にするような、その下に何かを作っていることを理解するであろうがやっていることを下回るチェック例3の場合は1と2を無効にします

<style> 
    /* calendar */ 
    h1 { font-family: calibri; font-size: 20px; color: #6d6d6d} 
table.calendar  { border-left:1px solid #999; } 
tr.calendar-row { } 
td.calendar-day { min-height:80px; font-size:11px; position:relative; } * html div.calendar-day { height:80px; } 
td.calendar-day:hover { background:#eceff5; } 
td.calendar-day-np { background:#eee; min-height:80px; } * html div.calendar-day-np { height:80px; } 
td.calendar-day-head { background:#ccc; font-weight:bold; text-align:center; width:120px; padding:5px; border-bottom:1px solid #999; border-top:1px solid #999; border-right:1px solid #999; } 
div.day-number  { background:#999; padding:5px; color:#fff; font-weight:bold; float:right; margin:-5px -5px 0 0; width:20px; text-align:center; } 
/* shared */ 
td.calendar-day, td.calendar-day-np { width:120px; padding:5px; border-bottom:1px solid #999; border-right:1px solid #999; } 
</style> 

<?php 
/* draws a calendar */ 
function draw_calendar($month,$year,$startDate,$endDate){ 

     $startDate = date('Y-m-d',$startDate); 
     $endDate = date('Y-m-d',$endDate); 

     $timestamp = strtotime($startDate); 
     $dayCountstart = date("d", $timestamp); 

     $timestamp = strtotime($endDate); 
     $dayCountend = date("d", $timestamp); 

     $timestampmonth = strtotime($startDate); 
     $monthstart = date("m", $timestampmonth); 

     $timestampmonthend = strtotime($endDate); 
     $monthend = date("m", $timestampmonthend); 

     $yearend = strtotime($endDate); 
     $yearofEnd = date("y", $yearend); 

     $dayMinus = $dayCountstart - 01; 
     $totalDaysOfMonthEnd = cal_days_in_month(CAL_GREGORIAN,$monthend,$yearofEnd); 
     $dayEndMinus = $totalDaysOfMonthEnd - $dayCountend; 

    /* draw table */ 
    $calendar = '<table cellpadding="0" cellspacing="0" class="calendar">'; 

    /* table headings */ 
    $headings = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); 
    $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>'; 

    /* days and weeks vars now ... */ 
    $running_day = date('w',mktime(0,0,0,$month,1,$year)); 
    $days_in_month = date('t',mktime(0,0,0,$month,1,$year)); 
    $days_in_this_week = 1; 
    $day_counter = 0; 
    $dates_array = array(); 

    /* row for week one */ 
    $calendar.= '<tr class="calendar-row">'; 

    /* print "blank" days until the first of the current week */ 
    for($x = 0; $x < $running_day; $x++): 
     $calendar.= '<td class="calendar-day-np"> </td>'; 
     $days_in_this_week++; 
    endfor; 

    /* keep going with days.... */ 
    for($list_day = 1; $list_day <= $days_in_month; $list_day++): 
     $calendar.= '<td class="calendar-day">'; 
      /* add in the day number */ 
      if($monthstart == $month) 
      { 
       if($list_day <= $dayMinus) 
       { 
        $calendar.= '<div class="day-number123">'.$list_day.'</div>'; 
       } 
       else 
       { 
        $calendar.= '<div class="day-number">'.$list_day.'</div>'; 
       } 
      } 
      else 
      { 
       if($monthend == $month) 
       { 
        if($list_day <= $dayCountend) 
        { 
         $calendar.= '<div class="day-number">'.$list_day.'</div>'; 
        } 
        else 
        { 
         $calendar.= '<div class="day-number123">'.$list_day.'</div>'; 
        } 
       } 
       else 
       { 
        $calendar.= '<div class="day-number">'.$list_day.'</div>'; 
       } 
      } 

      /** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/ 
      $calendar.= str_repeat('<p> </p>',2); 

     $calendar.= '</td>'; 
     if($running_day == 6): 
      $calendar.= '</tr>'; 
      if(($day_counter+1) != $days_in_month): 
       $calendar.= '<tr class="calendar-row">'; 
      endif; 
      $running_day = -1; 
      $days_in_this_week = 0; 
     endif; 
     $days_in_this_week++; $running_day++; $day_counter++; 
    endfor; 

    /* finish the rest of the days in the week */ 
    /* if($days_in_this_week < 8): 
     for($x = 1; $x <= (8 - $days_in_this_week); $x++): 
      $calendar.= '<td class="calendar-day-np"> </td>'; 
     endfor; 
    endif;*/ 

    /* final row */ 
    $calendar.= '</tr>'; 

    /* end the table */ 
    $calendar.= '</table>'; 

    /* all done, return result */ 
    return $calendar; 
} 

/* sample usages */ 
/*echo '<h2>July 2009</h2>'; 
echo draw_calendar(7,2009); 

echo '<h2>August 2009</h2>'; 
echo draw_calendar(8,2009); 
*/ 
$start = $startDate= $month = strtotime('2016-02-02'); 
$end = $endDate = strtotime('2016-03-03'); 

while($month < $end) 
{ 
    //$a = date('m Y', $month), PHP_EOL; 
    $startDate = $start; 
    $endDate = $end; 


    $newMonthInRange = date('m', $month); 
    $newYearInRange = date('Y', $month); 

    $newMonthInRangeTitle = date('F Y', $month);  
    $month = strtotime("+1 month", $month); 

    echo "<h1>".$newMonthInRangeTitle."</h1>"; 
    echo draw_calendar($newMonthInRange,$newYearInRange,$startDate,$endDate); 
} 
?> 
関連する問題