我正在使用 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/