2013-09-06 2 views
1

Я пытаюсь принять отдельные значения даты/времени из представления формы и проанализировать их на дату определенного формата.Проверка даты и времени в PHP

Если проверка не выполнена по какой-либо причине (например, 30 февраля, 13-го месяца и т. Д.), То результат должен по умолчанию соответствовать текущему времени.

if (isset($_POST['year'], $_POST['month'], $_POST['day'], $_POST['hour'], $_POST['minute'])) 
{ 
    $y = $_POST['year']; 
    $m = $_POST['month']; 
    $d = $_POST['day']; 
    $h = $_POST['hour']; 
    $i = $_POST['minute']; 
    if (checkdate($m, $d, $y)) 
    { 
     if ($h >= 0 && $h <= 23) 
     { 
      if ($i >= 0 && $i <= 59) 
      { 
       $str = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':00'; 
       $time = strtotime($str); 
      } 
      else $time = time(); 
     } 
     else $time = time(); 
    } 
    else $time = time(); 
} 
else $time = time(); 

$datetime = date('D j M Y - H:i:s T', $time); 
echo $datetime; 

происходят две вещи, которые я не понимаю:

  • Если значения один или более дата отсутствует, появляется ошибка о checkdate() ... Я не могу понять, почему валидация не просто сбой при первом, если()

  • Если одно или несколько значений времени отсутствуют, конечным результатом является UNIX Epoch ?!

ответ

1

Пустой чек значение перед выполнить checkdata

<?php 
if(!empty($y) && !empty($m) && !empty($d) && !empty($h) && !empty($i)) 
{ 
    if (checkdate($m, $d, $y)) 
    { 
     if ($h >= 0 && $h <= 23) 
     { 
      if ($i >= 0 && $i <= 59) 
      { 
       $str = $y.'-'.$m.'-'.$d.' '.$h.':'.$i.':00'; 
       $time = strtotime($str); 
      } 
      else $time = time(); 
     } 
     else $time = time(); 
    } 
    else $time = time(); 
} 
else $time = time(); 

$datetime = date('D j M Y - H:i:s T', $time); 
echo $datetime; 

?> 
5

Если значения один или более дата отсутствует, появляется ошибка о checkdate() ... Я не могу понять, почему проверка не только не в состоянии на первом, если()

Устанавливается и имеет действительное значение - это две разные вещи. Переменная может быть установлена ​​и содержать пустую строку или null. Убедитесь, что эти значения действительно содержат значения, используя empty().

Если отсутствует одно или несколько значений времени, конечным результатом является UNIX Epoch ?!

Если передать date() недопустимый второй параметр (т.е. действительной Отметки времени Unix) то по умолчанию эпохи.