2014-09-01 4 views
1

У меня возникли проблемы при расчете годового года.Как проверить состояние годовой даты

Здесь, в моем проекте, мы разрешаем пользователю создавать один план в любое время, но их конечная дата будет исправить, что есть (март-31). Пользователь может создать только один план в год. В следующем году снова они могут создать один новый план, и тот же путь будет действовать в течение следующих лет.

Теперь моя проблема заключается в том, как проверить это условие, что пользователь уже создал план на этот год?

Я получаю план дату создания (From 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 
) 

Я не получаю правильный путь для реализации этого.

+2

'$ prevYear = SUBSTR ($ массива [3], 4); if ($ prevYear == date ('Y')) {' – Daan

+0

Неужели вы хотите проверить, что значение уже существует в массиве? –

+0

@punithasubramaniv yeah –

ответ

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; 

Надеется, что это может помочь вам :)

+1

Awesome pude. Работал как шарм :) –

+0

Happy Coding :) – Kalpit

1

Попытка # 1

Первый способ лучше: вы сравниваете года 2 даты (в вашем случае - 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

Простой путь вычисления разности между LAS t и текущая дата (в вашем случае - «дата-время»). Затем вы проверяете, больше ли разница или равна 365 дням.

$current = time(); 
$last = strtotime("2010-04-19 08:20:45"); 
$days_diff = ($current - $last)/(60 * 60 * 24); 
$condition = ($days_diff >= 365); 
+0

Спасибо за решение bro :) –

Смежные вопросы