2012-08-30 184 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日。谢谢,我认为我们几乎在那里=) –

相关问题