2012-08-30 185 views
0

如何檢查當前日期是否在假期日期範圍內? 我有一個表「假期」與兩個日期列,start_date和end_date。用戶可以定義該範圍內的假日日期。我需要製作一個循環,檢查是假日日期範圍內的當前日期,如果是,則當前日期爲「+1天」,然後再次檢查。我已經到目前爲止:檢查當前日期是否在假期日期範圍內

<?php 
include ("config.php"); 
$curdate = date('Y-m-d', time()); 
$res = mysql_query("SELECT * FROM holidays WHERE '$curdate' BETWEEN `start_date` and `end_date`"); 
$resu = mysql_num_rows($res); 
if ($resu == NULL) 
     { 
     echo "Date is not range"; 
     } 
else 
    { 
    echo "Date is in range"; 
    } 
?> 
+0

你想從我們的幫助做什麼? – BenOfTheNorth

+0

我需要幫助創建一個循環,如果它落在預定義的範圍內,第二天就會產生$ curdate值。示例: 開始日期= 2012-08-29 結束日期= 2012-08-31 當前日期= 2012-08-30 日期範圍 - 當前日期= 2012-08-31 再次檢查... 直到當前日期= 2012-09-01 –

回答

1

你並不需要有一個循環,所以你可以做這樣的

<?php 
    include ("config.php"); 
    $curdate = date('Y-m-d', time()); 
    $res = mysql_query("SELECT id FROM holidays WHERE '$curdate' BETWEEN `start_date` and `end_date`"); 
    $resu = mysql_num_rows($res); 
    if ($resu == 0) 
    { 
     echo "Date is not range"; 
    } 
    else 
    { 
     $res = mysql_query("SELECT end_date FROM holidays WHERE end_date > '$curdate' ORDER BY end_date ASC LIMIT 1"); 
     $resu = mysql_fetch_array($res); 

     $next_day = strtotime($resu['end_date']) + 24 * 60 * 60; 
     echo 'The next available day is ' . date("Y-m-d", $next_day); 
    } 
?> 
+0

它說警告:mysql_num_rows()期望參數1是資源,布爾給出在第5行C:\ xampp \ htdocs \ php_test \ test-vreme.php 日期是沒有範圍,雖然日期在範圍內,範圍設置爲從8月29日到8月30日 –

+0

也許你沒有一個名爲'id'的字段,所以你必須在那裏放置一個現有的字段。檢查你的查詢語法 –

+0

是的,它的工作原理!非常感謝=) 它將與多個假期預定義,對吧? –

0

$resu將包含結果行的數量。所以你必須驗證是否$resu == 0

+0

或者我可以把mysql_affected_rows,無所謂。 –

1

試試這個。

<?php 
    include ("config.php"); 
    $curdate = date('Y-m-d', time()); 

    while(1) { 
    $res = mysql_query("SELECT * FROM holidays WHERE '$curdate' BETWEEN `start_date` and `end_date`"); 
    if(!mysql_num_rows($res)) 
    { 
     echo "Date is not range"; 
     break; 
    } 
    else 
    { 
     echo "Date is in range"; 
     $TS = strtotime($curdate); 
     $curdate = date('Y-m-d', strtotime('+1 day', $TS)); 
    } 
    } 
?> 
+0

當我在最後一行後面回顯$ curdate時,輸出爲 日期在範圍內2012-08-31日期在範圍內2012-09-01日期不在範圍內 所以,就是這樣,我只需要格式化它=) –

+0

是。格式化它,你就完成了。乾杯! – Vinay

+0

非常感謝你,我給你投票了,你和Matei給了我正確的答案,但我只能選擇一個...... –

1

這應該工作:

<?php 
include ("config.php"); 

$curdate = date('Y-m-d', time()); 

while(1) 
{ 
    $res = mysql_query("SELECT * FROM holidays WHERE '$curdate' BETWEEN `start_date` and `end_date` LIMIT 1"); 

    if(!mysql_num_rows($res)) 
    { 
     echo 'closest data available: ' . $curdate; 
     break; 
    } 

    $ar = mysql_fetch_assoc($res); 
    $curdate = date('Y-m-d', strtotime("+1 day", $ar['end_date'])); 
} 
+0

它輸出1346450400,即8月31日,我在假期表中的日期是開始日期('2012- 08-29')和結束日期('2012-08-31')。 輸出應該是9月1日。謝謝,我認爲我們幾乎在那裏=) –

相關問題