Как обеспечить правильную дату в PHP? - PullRequest
2 голосов
/ 26 июля 2011

Я использовал метод date_parse для проверки правильности ввода, что, кажется, просто отлично ... за исключением того, что на самом деле не проверяется правильность даты.

Например:

date_parse("2010/9/31/"); // returns FALSE 
date_parse("2010-9-31"); // should return FALSE!

Как я могу получить подтверждение того, что 2010-9-31 фактически является недействительной датой?

Ответы [ 4 ]

3 голосов
/ 26 июля 2011
<?php 
function is_date( $str ) 
{ 
  $stamp = strtotime( $str ); 

  if (!is_numeric($stamp)) 
  { 
     return FALSE; 
  } 
  $month = date( 'm', $stamp ); 
  $day   = date( 'd', $stamp ); 
  $year  = date( 'Y', $stamp ); 

  if (checkdate($month, $day, $year)) 
  { 
     return TRUE; 
  } 

  return FALSE; 
} 
?>

источник: http://php.net/manual/en/function.checkdate.php

1 голос
/ 26 июля 2011

Чтобы быть понятным, 2010-9-31 является действительной датой, поэтому возвращаемый результат - правильное поведение.

Если вы пытаетесь форсировать определенный формат, вы можете использовать date_parse_from_format

print_r(date_parse_from_format("Y.n.j", $date));

Или, если этого недостаточно, используйте preg_match в поле $ date перед его анализом. Если вы решите использовать preg_match, вы можете задать второй вопрос.

0 голосов
/ 26 июля 2011
$d = date_parse("2010-9-31");
if(count($d["warnings"]) > 0) { 
  echo array_shift($d["warnings"]) . "\n"; 
}

// --> "The parsed date was invalid"
0 голосов
/ 26 июля 2011

Если вы имеете в виду то, что я думаю, вы имеете в виду, тогда вам следует взглянуть на checkdate.

var_dump(checkdate(12, 31, 2000)); // true
var_dump(checkdate(2, 29, 2001)); // false, because was not a leap year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...