我在计算年度年度条件时遇到了麻烦。
在我的项目中,我们允许用户随时创建一个计划,但结束日期将是(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
)
我没有正确的方法来实现它。
答案 0 :(得分:1)
第一种方式是最好的:你比较2个日期的年份(在你的情况下 - 日期时间)。当前年度必须大于上一个日期: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));
简单方法是计算上次和当前日期之间的差异(在您的情况下 - “日期时间”)。然后检查差异是否大于或等于365天。
$current = time();
$last = strtotime("2010-04-19 08:20:45");
$days_diff = ($current - $last) / (60 * 60 * 24);
$condition = ($days_diff >= 365);
答案 1 :(得分:1)
这个怎么样?
$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;
希望它可以帮助你:)