我们假设用户可以将其时间作为多种格式之一的字符串提交。在DateTime::createFromFormat()
中是否有任何方法可以指定要解析的多种格式。
现在我注意到如果你指定一个格式,任何缺少的元素都会导致错误。
例如,假设我接受1h22m34s
和21m22s
作为有效时间字符串(第二个隐含00h
,但不要求它)
以下内容将在第二个字符串上显示错误:
$mytime = `21m22s`;
echo DateTime::createFromFormat('H\hi\ms\s',$mytime)->format('H:i:s');
如何让它解析多种格式?
还是有另一种非黑客的方式来处理多种格式吗?
答案 0 :(得分:1)
我知道已经有一段时间了,但这是一个基于@dave注释的解决方案。
$date ='20200702';
$formats = ['Y-m-d', 'Y/m/d', 'Ymd'];
$dateObj = null;
foreach ($formats as $format) {
if ($dateObj = Carbon::createFromFormat($format, $date)){
break;
}
}
如果您使用的是Carbon,那么这是另一种解决方案,因为其行为略有不同。
$date = '20200727';
$formats = ['Y-m-d', 'Y/m/d', 'Ymd'];
$dateObj = null;
foreach ($formats as $format) {
try{
if ($dateObj = Carbon::createFromFormat($format, $date)){
break;
}
} catch (InvalidArgumentException $e) {
Log::debug('date', [$dateObj]); // It's null
}
}