【问题标题】:Check if current date falls in holiday date range检查当前日期是否在假期日期范围内
【发布时间】:2012-08-25 01:36:11
【问题描述】:

如何检查当前日期是否在假期日期范围内? 我有一个包含两个 DATE 列 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";
    }
?>

【问题讨论】:

  • 您希望我们帮助您具体做什么?
  • 我需要帮助来创建一个循环,如果 $curdate 值在预定义的范围内,则它会在第二天生成。示例:开始日期 = 2012-08-29 结束日期 = 2012-08-31 当前日期 = 2012-08-30 日期在范围内 - 当前日期 = 2012-08-31 再次检查...直到当前日期 = 2012- 09-01

标签: php mysql


【解决方案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);
   }
?>

【讨论】:

  • 它说警告:mysql_num_rows() 期望参数 1 是资源,在第 5 行的 C:\xampp\htdocs\php_test\test-vreme.php 中给出的布尔值日期不是范围,尽管日期在范围内,范围设置为从 8 月 29 日到 8 月 30 日
  • 可能您没有名为id 的字段,因此您必须在其中放置一个现有字段。检查您的查询语法
  • 是的,它有效!非常感谢 =) 它适用于预定义的多个假期,对吧?
  • 是的.. 我已经做了那个查询来处理多个假期日期范围
  • 老兄,帮助,在 XAMPP 上的 Windows 中,脚本工作正常,它给出了正确的日期,但在 Debian 上,'下一个可用日期是 1970-01-02'。 Debian 系统时间没问题,mySQL 中的 NOW() 返回正确的日期,我不知道它是什么。
【解决方案2】:

这应该可行:

<?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']));
}

【讨论】:

  • 它输出 1346450400,即 8 月 31 日,我在假期表中的日期是开始日期('2012-08-29')和结束日期('2012-08-31')。输出应该是 9 月 1 日。谢谢,我想我们快到了 =)
【解决方案3】:

试试这个。

<?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));
     }
  }
?>

【讨论】:

  • 当我在最后一行之后回显 $curdate 时,输出是 Date is in range2012-08-31Date is in range2012-09-01Date is not range 所以,就是这样,我只需要格式化它一点点 =)
  • 非常感谢老兄,我投票给你了,你和马太给了我正确的答案,但我只能选择一个......
【解决方案4】:

$resu 将包含结果行数。所以你必须验证$resu == 0

【讨论】:

  • 或者我可以放mysql_affected_rows,没关系。
猜你喜欢
  • 2015-02-13
  • 2017-01-28
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多