簡體   English   中英

獲取使用php / mysql預訂的日期

[英]Get dates that are booked using php/mysql

我在mysql中有一個表,其中包含開始日期和結束日期。 這些開始和結束日期適用於預訂酒店的情況。 我需要做的是顯示一個日歷,顯示預訂的日期和當月可用的日期。 我怎樣才能知道當月預訂的天數? 我可以循環瀏覽當月的每一天,但這意味着30或31個查詢,是否有更好,更優化的方式來查找當月預訂的天數,以便我可以在日歷上對日期進行顏色編碼?

表結構是這樣的:

hotelid int(11)

startdate(日期)

結束日期

查詢請求:

SELECT * FROM hotel_book WHERE hotelid = 1 AND DATE_FORMAT(startdate,'%Y-%m') >= '2012-08' AND DATE_FORMAT(enddate,'%Y-%m') <= '2012-08'

我確定我可以通過它2012-08-01和2012-08-31所以我不在每張支票上處理日期格式。 但僅僅是出於示例目的。

另一種方法是允許您的日歷接受開始日期和結束日期,並呈現在日歷邏輯中預訂的每一天。 如果日歷使用javascript而不是PHP或MySQL對您的服務器的影響將是最小的。 無論哪種方式,你最終都會循環,它只取決於你想要發生的地方。

所以首先得到酒店的身份。 然后執行查詢以獲取與該酒店ID相對應的所有開始日期和結束日期。 我建議你有第二個字段來計算差異:

如果有人預訂了第1到第3,那么第2個也被預訂,所以你必須創建一個計算差異的函數,然后輸出'在'之間'字段。 所以它必須首先得到起始編號,然后每次增加+1天直到結束日期。 所以它最終會像數組(1,2,3)

然后,您可以獲取此信息並將其放入已預訂的數組中以獲取jquery或ajax日歷(可在線獲取)。 據推測,一旦日期被預訂,它就不能再次預訂,否則你會有1,2,3的重復值 - 所以我猜這家酒店只有一個房間可用或什么的。

這是獲取所需日期的代碼。 您將能夠在日歷上顯示它們的邏輯。 請注意,我使用自定義類進行數據庫選擇。

$id=$_POST['id'];
$days=$db->select("reservations","room_id=".$id);
$listofdays=array();
foreach ($days $day) {
$start=$day['start'];
$end=$day['end'];
$liste=array(); //This array will be filled with dates between start and end
$liste=date_range($start, $end, $step = '+1 day', $output_format = 'm-d-Y'     );
foreach ($liste as $key => $list) {
$listofdays[] = $list;

}
}

// date_range函數如下:

    function date_range($first, $last, $step = '+1 day', $output_format = 'm/d/Y' ) {

$dates = array();
$current = strtotime($first);
$last = strtotime($last);

while( $current <= $last ) {

    $dates[] = date($output_format, $current);
    $current = strtotime($step, $current);
}

return $dates;

};

暫無
暫無

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

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