2012-01-20 106 views
0

我有我的酒店客房預訂系統的php mysql calneder。但它顯示了一個奇怪的問題,我不知道爲什麼。它不會在2013年之後和2012年2月之後直接進入2013年。php日曆2012年2月後去2013年3月

另一個問題是我讓日曆顯示房間是否已預訂。如果我從23-25預訂房間它標誌着預訂24和25 wheather它應該是23和24。這裏的壓延機的代碼:

function.php

 function draw_calendar($month,$year){ 

/* 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">&nbsp;</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">';; 

     $calendar.= '<div class="day-number">'.$list_day.'</div>'; 

     /** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/ 
     $calendar.= getAllRooms($list_day,$month,$year); 

    $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">&nbsp;</td>'; 
    endfor; 
endif; 

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

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

/* all done, return result */ 
return $calendar; 
} 
function getAllRooms($date,$month,$year) 
    { 
    global $db; 
    $where = ' '; 
if ($_GET['room_type'] != '') { 
    $where .= " HAVING room_type = '".$_GET['room_type']."'"; 
} 

$sql = "SELECT room_type 
     FROM 
      room 
     GROUP BY 
      room_type 
     $where 
     "; 
/*echo $sql; 
exit;*/ 
$result = $db->Execute($sql);; 
$room = ''; 
while (!$result->EOF) { 
    $qs  = '?room_type='.$result->fields('room_type').'&month='.$month.'& year='.$year; 
       $total =  get_total_rooms_by_type($result->fields('room_type'),$date,$month,$year); 
    $room .= 
    '<div class="'.$result->fields('room_type').'"> 

     <a href="'.BASE_URL.'room_detail.php'.$qs.'"> 
      '.$result->fields('room_type').' ('.$total.') 
     </a> 
    </div>'; 
    $result->MoveNext(); 
} 
$result->Close; 
return $room; 
} 
    function get_total_rooms_by_type($room_type,$date,$month,$year) 
{ 
global $db; 
$_newdate = $year.'-'.$month.'-'.$date; 
$sql   = "SELECT room_id FROM room where room_type = '$room_type' "; 
$room_results = $db->Execute($sql); 
$room_ids  = array(); 
while (!$room_results->EOF) { 
    $room_ids[] = $room_results->fields('room_id'); 
    $room_results->MoveNext(); 
} 
$room_results_str = implode(',',$room_ids); 
$where = ' where 1 = 1 '; 
$available = 1; 
if ($_GET['booking_status'] == '1') { 
    $where .= ' and (booking_status = 1 or booking_status = 2)'; 
    $available = 0; 
} else if ($_GET['booking_status'] == '2') { 
    $where .= ' and (booking_status = 2)'; 
    $available = 0; 
} 
$sql = "select count(room_id) from bookings 
     $where 
      and checkin <= '$_newdate' 
      and '$_newdate' <= checkout 
      and room_id in ($room_results_str) 
     "; 
if ($available == 0) { 
    return $db->GetOne($sql); 

} else { 
    return count($room_ids) - $db->GetOne($sql); 
} 


} 
function draw_calendar_room($month,$year){ 

/* 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">&nbsp;</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">';; 

     $calendar.= '<div class="day-number" style=" padding:5px 5px 45px;background-color:'.getRoomColor($list_day,$month,$year).'">'.$list_day.'</div>'; 

     /** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/ 


    $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">&nbsp;</td>'; 
    endfor; 
endif; 

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

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

/* all done, return result */ 
return $calendar; 
} 
function getRoomColor($date,$month,$year) 
{ 
global $db; 
$where = ' '; 
if ($_GET['room_id'] != '') { 
    $room_id = $_GET['room_id']; 

} else { 
    $sql = "SELECT room_id 
        FROM 
         room 
        WHERE 
         room_type = '".$_GET['room_type']."' order by room_number asc 
        "; 
    $room_id = $db->GetOne($sql);; 
} 
$_newdate = "$year-$month-$date"; 
$sql = "SELECT booking_status 
     FROM 
      bookings 
     where 
      checkin <= '$_newdate' 
      and 
      '$_newdate' <= checkout 
      and 
      room_id = '$room_id' 
     "; 
/*echo $sql; 
exit;*/ 
$result = $db->GetOne($sql);; 
if ($result == 1) { 
    return '#FF0'; 
} else if ($result == 2) { 
    return '#F00'; 
} else { 
    return '#64C733'; 
} 

} 

的index.php爲下一個先前功能:

 $prev_month = (($month - 1) == 0) ? 12 : $month -1 ; 
     $prev_year = ($prev_month == 12) ? $year - 1 : $year; 
    ?> 
    <h2 class="calender"> 
    <a href="index.php?month=<?php echo $prev_month ?>&year=<?php echo $prev_year ?>" class="prev"> &gt;&gt;</a> 


    <span class="month"><?php echo date('F',mktime(0,0,0,$month,1,$year)).' '.$year.''; ?></span> 
    <?php 
     $next_month = (($month + 1) == 13) ? 1 : $month + 1 ; 
     $next_year = ($prev_month == 1) ? $year + 1 : $year; 
    ?> 
    <a href="index.php?month=<?php echo $next_month ?>&year=<?php echo $next_year ?>" class="next"> 
     &lt;&lt;</a> 

在此先感謝大家。

回答

2

我只看着第二個片段,但我敢肯定,這就是問題所在:

$next_year = ($prev_month == 1) ? $year + 1 : $year; 

在二月的情況下,$prev_month設置爲1,那麼您$next_year變得$year + 1

我認爲,所有你所要做的,就是把上面一行:

$next_year = ($month == 12) ? $year + 1 : $year; 
+0

是的兄弟運動問題用這條線解決了很多。但你能告訴我如何解決第一個問題嗎?再次感謝.. –

+0

@ Snowbell92我只注意到這個問題。無論如何,你可能會問一個單獨的問題,只發布導致該特定問題的代碼。 – jeroen

1

我不能確切地告訴你代碼中的錯誤是什麼,但我很確定它與今年 - 2012年 - 是一個閏年有關。

確保您的變量(如$ days_in_month)在2月份有29天的選項。

0

應該是這樣?

<?php 
    $next_month = (($month + 1) == 13) ? 1 : $month + 1 ; 
    $next_year = ($prev_month == 12) ? $year + 1 : $year; 
?> 
相關問題