0

我正在比较两个日期From_dateTo_date我的数据库表行。

逻辑是: 如果用户已经在这两个日期(从文本框收到的日期)之间设置了预算,则返回错误消息Budget already set for this from-date & to-date

我将我的日期转换为 Unix 时间戳更容易。

在尝试此操作之前,我参考了此链接: 1. 如何检查起始日期和截止日期之间的两个日期 2. 测试两个整数范围是否重叠的最有效方法是什么?

我尝试了以下代码:但我没有得到结果。它总是向我显示错误的信息, Budget already set for this from-date & to-date

 <?php  if (isset($_POST['submit']))
        {
             include '../../../include/connection.php'; 
             $frmdate= $_POST['frmdate'] ;
             $todate=$_POST['todate'] ; 
             $fromTimestamp = strtotime( $frmdate );
              $toTimestamp = strtotime( $todate ); 

     function  check_function($fromTimestamp,$toTimestamp)//function for checking the two dates which are rrecieved from the database table
           {
             $sid=$_SESSION['id'];
             $result12=mysql_query("SELECT * FROM budget where creater_id = '$sid'"); 
             while($test12 = mysql_fetch_array($result12))
                 {
                   $from_date = strtotime($test12['from_date']);//getting all the FROM-Dates_column
                   $to_date = strtotime($test12['to_date']);//getting all the TO-Dates_column

                    if((($fromTimestamp >= $from_date) && ($fromTimestamp <= $to_date)) || (($toTimestamp >= $from_date) && ($toTimestamp <= $to_date)))
                       {
                         return TRUE;
                         break;
                       }
                    return FALSE;
                  }
            }

           if(check_function($fromTimestamp,$toTimestamp))//Returns TRUE
              {
                  mysql_query("INSERT INTO `budget` (heads_id,amount,from_date,to_date,creater_id,created_date,updater_id,updated_date) VALUES ('$headsid','$amount','$frmdate','$todate',$uid,NOW(),$uid,NOW())");
              }
            else
              {
                 echo 'Budget already set for this from-date & to-date';   //
             }
        }  ?>
4

5 回答 5

0

试试这个。。

if(isset($to_date) && isset($from_date)){
    if((($fromTimestamp >= $from_date) && ($fromTimestamp <= $to_date)) || (($toTimestamp >= $from_date) && ($toTimestamp <= $to_date)))
    {
      $val = 'Y'; //return Y in meet this condition
    }
    else{
      $val = 'N'; // return N if meet this condition
    }
}
if($val == 'Y') //Returns TRUE
{
mysql_query("INSERT INTO `budget` (heads_id,amount,from_date,to_date,creater_id,created_date,updater_id,updated_date) VALUES ('$headsid','$amount','$frmdate','$todate',$uid,NOW(),$uid,NOW())");
}
else
{
echo 'Budget already set for this from-date & to-date';   //
}
于 2013-04-08T05:49:27.247 回答
0

您是否尝试与默认 mysql 日期格式 2013/04/11 (Y/m/d) 进行比较?如果您只考虑日期,那么您必须将数据以 Y/m/d 格式存储在 mysql 数据库中,并且您可以与相同的数据进行比较!它效果最好(y)

1) 以 MySQL 日期格式存储:

date("Y/m/d", strtotime($Date));

2) 比较日期

<?php  
if (isset($_POST['submit']))
{
    include '../../../include/connection.php'; 
    $frmdate=  date("Y/m/d", strtotime($_POST['frmdate']));
    $todate= date("Y/m/d", strtotime($_POST['todate'])); 
     .. so on
}
?>
于 2013-04-08T05:53:51.863 回答
0

我刚刚看了你的代码。

您的 while 循环往往只运行一次。返回 FALSE;statement 是 while 循环中的最后一个语句。因此,如果您查询返回多个结果,循环似乎暗示,您将始终只获取一个结果。之后运行您的函数返回 true(当第一个结果与 if 语句匹配时)或在任何其他情况下返回 false。

while($test12 = mysql_fetch_array($result12))
{
   $from_date = strtotime($test12['from_date']);//getting all the FROM-Dates_column
   $to_date = strtotime($test12['to_date']);//getting all the TO-Dates_column

   if((($fromTimestamp >= $from_date) && ($fromTimestamp <= $to_date)) || (($toTimestamp >= $from_date) && ($toTimestamp <= $to_date)))
   {
     return TRUE;
     break;
   }
   return FALSE;
}

关于这两个陈述的最后说明

return TRUE;
break;

这里不需要break,return已经脱离了while循环。

希望这能解决您的问题!

于 2013-04-08T06:20:34.820 回答
0
function  check_function($fromTimestamp,$toTimestamp)//function for checking the two dates which are rrecieved from the database table
 {
 $sid=$_SESSION['id'];
$result12=mysql_query("SELECT * FROM budget where creater_id = '$sid' and from_date >= $frmdate and to_date <= $todate")
if(mysql_num_rows($result12) > 0)
{
return true;
}
else
{
return false;
}
}


if(check_function($fromTimestamp,$toTimestamp)==TRUE)//Returns TRUE
              {
                  mysql_query("INSERT INTO `budget` (heads_id,amount,from_date,to_date,creater_id,created_date,updater_id,updated_date) VALUES ('$headsid','$amount','$frmdate','$todate',$uid,NOW(),$uid,NOW())");
              }
            else
              {
                 echo 'Budget already set for this from-date & to-date';   //
             }
于 2013-04-08T06:20:46.757 回答
-1

html表单的格式是什么?$frmdate= $_POST['frmdate'] ; $todate=$_POST['todate'] ;

以及列表中的格式是什么?例如:日期、VARCHAR、TIMESTAMP 等....

于 2013-04-08T06:01:59.123 回答