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

标签 php datetime

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

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

使用

if (($timestamp = strtotime($str)) === false)

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

示例:

$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)) ?

...

}

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

最佳答案

In short, is there an easy way to check if a string value is a date?

不是真的,因为它可以是任意格式。

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

不过,请为误报的可能性做好准备,因为 strtotime() 甚至会解析诸如“上周五”之类的内容。

如果 strtotime() 对您来说过于自由,您可以考虑构建一个您想要接受的日期格式的集合,并运行 PHP 5.3 的 DateTime:createFromFormat。在每个日期使用每一种格式。

类似(未经测试)

$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>";
    }
 }

关于php - 如何确定值是否是PHP中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226096/

相关文章:

sql - 将周工资信息分为日工资信息

php - 上传照片错误提示: Undefined index: photo

php - 将用户数据从js发送到php

php - Laravel/Sentinel - 如何通过数据透视表获取值(value)

php - Zend Framework PHP 中页面的基本流程

javascript - "Unhandled Rejection (SyntaxError): Unexpected token h in JSON at position 0"与response.json()

java - 如何检查特定日期时间是否位于相邻行日期之间?

spring - 为什么 Spring JPA 将有效日期转换为无法识别的格式化字符串?

python - 减去不同滞后的日期

python - 更好地使用 apply 来使用实际迭代行和同一整列的行来计算新值