如何确定值是否是PHP中的日期

Tod*_*ses 11 php datetime

我正在使用PHP中的值数组.其中一些值可能包含各种字符串格式的日期.

我需要将多种格式的日期转换为它们的数字等价物(Unix时间戳).问题是能够确定字符串是否是日期.

运用

if (($timestamp = strtotime($str)) === false)
Run Code Online (Sandbox Code Playgroud)

将从字符串中检查有效日期,但如何确定该值是否应该作为日期验证?

例:

$x = {1,2,3,"4","11/12/2009","22/12/2000",true,false};

foreach($x as $value)
{

if(is_bool($value))

if(is_string($value))

if(is_numeric($value))

if(is_date($value)) ?

...

}
Run Code Online (Sandbox Code Playgroud)

简而言之,是否有一种简单的方法可以检查字符串值是否为日期?

Pek*_*ica 20

简而言之,是否有一种简单的方法可以检查字符串值是否为日期?

不是真的,因为它可能是任意格式.

如果可能的话,我倾向于将解析留给魔术strtotime().如果它设法创建一个有效的日期,那很好.如果没有,你会收到false.

但是,要为误报的可能性做好准备,因为strtotime()甚至会解析像"上周五"这样的事情.

如果strtotime()你太自由了,你可以考虑建立一个你想接受的日期格式集合,并DateTime:createFromFormat在每个日期使用每种格式运行PHP 5.3 .

像(未经测试的)

$formats = array("d.m.Y", "d/m/Y", "Ymd"); // and so on.....
$dates = array(1,2,3,"4","11/12/2009","22/12/2000",true,false);

foreach ($dates as $input) 
 { 
   foreach ($formats as $format)
    {
      echo "Applying format $format on date $input...<br>";

      $date = DateTime::createFromFormat($format, $input);
      if ($date == false) 
       echo "Failed<br>";
      else
       echo "Success<br>";
    }
 }
Run Code Online (Sandbox Code Playgroud)

  • 它似乎可以快速而优雅地完成:http://au1.php.net/checkdate#113205 (3认同)

Dav*_*ave 13

Pekka脚本的问题是'2011-30-30'的日期也被视为有效.这是修改后的版本.

$formats = array("d.m.Y", "d/m/Y", "Ymd"); // and so on.....
$dates = array(1,2,3,"4","11/12/2009","22/12/2000",true,false);

foreach ($dates as $input) 
 { 
   foreach ($formats as $format)
    {
      echo "Applying format $format on date $input...<br>";

      $date = DateTime::createFromFormat($format, $input);
      if ($date == false || !(date_format($date,$format) == $input) ) 
       echo "Failed<br>";
      else
       echo "Success<br>";
    }
 }
Run Code Online (Sandbox Code Playgroud)