我正在使用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)
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)
| 归档时间: |
|
| 查看次数: |
34559 次 |
| 最近记录: |