簡體   English   中英

PHP日歷將於2012年2月之后進入2013年3月

[英]php calender goes to march 2013 after february 2012

我的酒店客房預訂系統具有php mysql calneder。 但這顯示了一個奇怪的問題,我不知道為什么。 它不會在2013年之后,並且在2012年2月之后直接進入2013年3月。

另一個問題是我要讓日歷顯示要預訂的房間。 如果我從23-25預定房間,則它標記為24和25小麥,則應分別為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>

在此先感謝所有人。

我只看了第二個片段,但是我很確定這是問題所在:

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

如果是2月,則$prev_month設置為1,因此您的$next_year變為$year + 1

我認為您要做的就是將該行更改為:

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

我無法確切地說出代碼中的錯誤是什么,但是我很確定這與今年-2012年-being年有關。

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

應該是這個嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM