2017-01-10 5 views
2

Как я могу проверить, будет ли заданная дата (т.е. 4/2017) в течение 6 месяцев с этого момента в будущем?PHP дата в течение 6 месяцев

Например:

4/2017 true 
8/2017 false 
5/2017 true 

я сейчас:

$datum = explode(': ', $given_date); // Separate date from string 
$datum = str_replace('/', '-', $datum[1]); // Given format month/year 
$datum = strtotime('01-'.$datum); // Given only month/year 
$limit_datum = strtotime('+6 months'); 

Но я наклонена прямо сейчас, и не может получить, как сравнить его ...

+0

Используйте [ 'DateTime'] (https://secure.php.net/DateTime). –

ответ

4

Использование DateTime, он становится очень тривиальна:

$now = new DateTime(); 
$input = DateTime::createFromFormat('m/Y', '4/2017'); 

$diff = $input->diff($now); // Returns DateInterval 

// m is months 
$lessThanSixMonths = $diff->y === 0 && $diff->m < 6; // true 

См DateInterval и DateTime.

+0

Это работает, однако я должен был сделать некоторые исправления, чтобы проверить, действительно ли дана дата, если ее пустой или неправильный формат, diff возвращает фатальную ошибку. Однако после исправления это работает. – Diamonte

+0

@ Diamonte Да, конечно, вы все равно должны подтвердить свой ввод пользователя! – Pete

0

Вы необходимо сделать что-то вроде этого

$todayDate = time(); 
$date_6_months = strtotime("+6 months"); 
$givenDate = strtotime($date); 
if ($givenDate > $todayDate && $givenDate < $date_6_months){ 
    put your code 
} 
-1

EDIT: я изменить свой предыдущий неправильно script.In это один можно сравнить строки из двух дат

$given_date= "...."; //set given date (m/Y) 
    $current_date = date("m/Y",mktime()); 

    $month_given = strtok($given_date, '/'); 
    $year_given = strtok('/'); 
    $month_now = strtok($current_date, '/'); 
    $year_now = strtok('/'); 

    $diff_year = $year_given - $year_now; 
    $diff_month = $month_given - $month_now; 
    $our_diff = $diff_year * 12 + $diff_month; 

    if($our_diff <= 6 && $our_diff >= 0){ 
     //less or equal than 6months 
    } 
    else if($our_diff > 6){ 
    //more than sixmonths 
    } 
    else{ 
    //negative number 
    } 
+1

Вычитание двух строк в формате 'm/Y' приведет к бессмысленным результатам. – deceze

+0

Доказательство: https://3v4l.org/PKKXT – deceze

+0

Вы были правы, я меняю свой сценарий другим способом. Danke – adespotos

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

  • Нет связанных вопросов^_^