2015-10-10 2 views
1

У меня нет фона в PHP, но недавнему клиенту требуется некоторое обновление, поэтому я делаю все возможное. То, что я пытаюсь выполнить, - это сначала обновить форму, чтобы принять правильный формат даты, чтобы скрыть код, который я создал, который будет через ошибку, если он меньше 24 часов с настоящего времени. Теперь форма:Дата установки Выбор формы php

<p> 
 
\t \t \t <label for="date">Date:<span>*</span></label> 
 
\t \t \t <span> 
 
\t \t \t \t <input type="text" name="date" id="date" value="<?php $this->value('date'); ?>" size="25" /> 
 
\t \t \t </span> 
 
\t \t </p> 
 
     
 
     <p> 
 
\t \t \t <label for="time">Eat Time:<span>*</span></label> 
 
\t \t \t <span> 
 
\t \t \t \t <input type="text" name="time" id="time" value="<?php $this->value('time'); ?>" size="10" /> 
 
\t \t \t </span> 
 
\t \t </p> 
 
     
 
     <p> 
 
     <label for="timedes">AM or PM:<span>*</span></label> 
 
\t \t \t <span> 
 
\t \t \t \t <select name="timedes" id="timedes"> 
 
\t \t \t \t \t <option value="0" <?php $this->value('timedes', '0', 'selected="selected"'); ?>>Select..</option> 
 
\t \t \t \t \t <option value="AM" <?php $this->value('timedes', 'AM', 'selected="selected"'); ?>>AM</option> 
 
\t \t \t \t \t <option value="PM" <?php $this->value('timedes', 'PM', 'selected="selected"'); ?>>PM</option> 
 
\t \t \t \t </select> 
 
\t \t \t </span> 
 
\t \t </p>

код, который мне нужно будет изменить, чтобы проверить, если это менее чем за 24 часа или нет.

// define variables for date 
 
date_default_timezone_set('America/New_York'); // timezone 
 
$dateInput = '10/11/2015 15:54'; //date they selected string 
 
$cateringDate = (strtotime("$dateInput")); // date selected converted to time 
 
$dateNow = date('m/d/y H:i'); // current date and time string 
 
$currenttime = (strtotime("$dateNow")); // current date and time converted 
 
$dateAllowed = $currenttime + (86400); // current date and time 24 hours added on 
 
$difference = $dateAllowed - $cateringDate; // date selected vs current date + 24hours 
 

 
if ($cateringDate >= $dateAllowed) { 
 

 
    echo 'good job'; 
 

 
} else { 
 

 
    echo 'try again'; 
 

 
}

ответ

0

Есть несколько способов сделать это. Но вот один с помощью strtotime:

date_default_timezone_set('America/New_York'); // timezone 
    $dateInput = '10/11/2015 15:54'; 

    if (strtotime('+24 hours') < strtotime($dateInput)) { 
     echo 'good job'; 
    } else { 
     echo 'try again'; 
    } 

Если StrToTime не понимает формат он возвращает ложь, так:

if (false === strtotime($dateInput)) { 
     echo 'Sorry, what?'; 
    } 
+0

был бы способ сделать это вместо этого с требованием a.m. и p.m. выбор и 12-часовое время? что нужно будет изменить, чтобы правильно рассчитать или для того, чтобы его вычислить, это должно быть 24-часовое время? – jshbll

+0

Strtotime довольно умный. Например, «2015-10-11 10 утра» будет работать. Вы также можете обратиться к [документации] (http://php.net/manual/en/datetime.formats.php) для получения дополнительных примеров – Viktoras

+0

Это довольно удивительно благодаря тонне – jshbll

0

Используйте datetime класс и воспользоваться методом diff, то есть:

date_default_timezone_set('America/New_York'); // timezone 
$date1 = new DateTime('NOW'); 
$dateInput = '10/10/2015 15:54'; 
$date2 = DateTime::createFromFormat('m/d/Y H:i', $dateInput); 
$diff = $date2->diff($date1); 
if($diff->format('%d') != 0){ 
    echo "good job"; 
}else{ 
    echo "try again"; 
} 

Мы проверяем, отличается ли разница (в днях) между NOW и $dateInput, отличается от 0, нулевые средства нет, чем 24h с будущей или предыдущей даты.

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