Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查年度日期条件_Php_Mysql_Arrays_Date - Fatal编程技术网

Php 如何检查年度日期条件

Php 如何检查年度日期条件,php,mysql,arrays,date,Php,Mysql,Arrays,Date,我很难计算每年的情况 在我的项目中,我们允许用户在任何时候创建一个计划,但他们的结束日期将是固定的(3月31日)。 用户每年只能创建一个计划。明年,他们又可以制定一个新的计划,接下来的几年也是如此 现在我的问题是如何检查用户已经为今年创建了计划的条件 我在数组中获得创建计划的日期(从MySQL),如下所示: Array ( [0] => 2010-04-19 08:20:45 [1] => 2011-09-19 08:20:45 [2] => 201

我很难计算每年的情况

在我的项目中,我们允许用户在任何时候创建一个计划,但他们的结束日期将是固定的(3月31日)。 用户每年只能创建一个计划。明年,他们又可以制定一个新的计划,接下来的几年也是如此

现在我的问题是如何检查用户已经为今年创建了计划的条件

我在数组中获得创建计划的日期(从MySQL),如下所示:

 Array
 (
    [0] => 2010-04-19 08:20:45
    [1] => 2011-09-19 08:20:45
    [2] => 2012-05-19 08:20:45
    [3] => 2013-08-19 08:20:45
 )
我没有找到正确的方法来实现这一点。

尝试#1 第一种方法是最好的:你比较两个日期的年份(在你的例子中是datetimes)。当前年份必须大于最后日期的年份:2010-2014。然后以同样的方式比较日和月,但更精确:

$current = time();
$last = strtotime("2010-04-19 08:20:45");
$years_diff = (int) date("Y", $current) - (int) date("Y", $last);
$months_diff = (int) date("n", $current) - (int) date("n", $last);
$days_diff = (int) date("j", $current) - (int) date("j", $last);

$condition = false;
if ($years_diff == 1) { // ABOUT one year ago when last plan was created
    if ($months_diff == 0) { // Current month is month when plan was created
        if ($days_diff >= 0) { // Larger than or equal to day when last plan was created
            $condition = true;
        }
    }
    else if ($months_diff > 0) { // Next months in new year
        $condition = true;
    }
}
else if ($years_diff > 1) { // ABOUT 2 or more years ago when last plan was created
    $condition = true;
}
有压缩版本的条件:

$condition = (($years_diff == 1) ? (($months_diff == 0) ? ($days_diff >= 0) : ($months_diff > 0)) : ($years_diff > 1));


尝试#2 简单的方法是计算上一个日期和当前日期之间的差值(在您的例子中是“datetime”)。然后检查差值是否大于或等于365天

$current = time();
$last = strtotime("2010-04-19 08:20:45");
$days_diff = ($current - $last) / (60 * 60 * 24);
$condition = ($days_diff >= 365);
这个怎么样

   $last = strtotime("2014-04-01");

   $years_diff = (int) date("Y") - (int) date("Y", $last);

   if($years_diff == 1){
      if(date('Y-m-d') > date('Y-m-d', strtotime((date('Y',$last)+1)."-03-31")))
      {
        echo 'Let them create new plan'; exit;
      }
   }
   else if($years_diff == 0){
     if(date('m',$last) > 03){
         echo 'Sorry ! you can not create'; exit;
     }
     if(date('Y-m-d') > date('Y-m-d', strtotime(date('Y',$last)."-03-31")))
     {
        echo 'Let them create new plan'; exit;
     }   
   }
   else
      echo 'Let them create new plan'; exit;

希望它可以帮助您:)

$prevYear=substr($array[3],4);如果($prevYear==date('Y'){是否要检查数组中是否已经存在该值?@punithasubramanivyeah@Daan明白了,只要查看上面的评论,这可能是最快的方法;)你不能测试一下结束日期是否在当前日期之后吗?棒极了,伙计。工作得很有魅力:)谢谢你的解决方案兄弟:)