PHP DateTime :: createFromFormat()的多种格式

时间:2017-04-19 17:54:20

标签: php datetime

我们假设用户可以将其时间作为多种格式之一的字符串提交。在DateTime::createFromFormat()中是否有任何方法可以指定要解析的多种格式。

现在我注意到如果你指定一个格式,任何缺少的元素都会导致错误。

例如,假设我接受1h22m34s21m22s作为有效时间字符串(第二个隐含00h,但不要求它)

以下内容将在第二个字符串上显示错误:

   $mytime = `21m22s`;
   echo DateTime::createFromFormat('H\hi\ms\s',$mytime)->format('H:i:s');

如何让它解析多种格式?

还是有另一种非黑客的方式来处理多种格式吗?

1 个答案:

答案 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
    }
}