如何解决检测Carbon :: createFromDate的日期格式
我有一个API调用,以各种格式返回日期。我编写了一个try ... catch块来尝试Carbon :: parse和Carbon :: createFromDate,它具有多种格式,这些格式似乎可以正常工作,但是我觉得必须有更好的方法来解决这个问题。
以下是两种可能的日期格式:
2020-09-24T00:00.000Z
24/09/20 00:00:00
这是我的代码
// Test different date formats
$formats = ['d/m/y H:i:s','Y-m-d'];
$dateObj = null;
foreach ($formats as $format) {
try {
if ($dateObj = Carbon::createFromFormat($format,$date)) {
break;
}
} catch (\InvalidArgumentException $e) {
$error = 'invalid date';
}
try {
if ($dateObj = Carbon::parse($date)) {
break;
}
} catch (\InvalidArgumentException $e) {
$error = 'invalid date';
}
}
解决方法
Carbon::parse()
完全可以解析各种格式(它使用DateTime
本机构造函数),您可以依靠它来了解更常见的格式。实际上,只有在您有确切的期望时,才需要使用createFromFormat()
,或者在有歧义的情况下优先使用1/2
。例如,createFromFormat()
默认以美国方式(1月2日)进行解析,直到2月1日为止,此处首先尝试使用d/m
格式的parse()
格式,否则尝试{{1 }}可能就足够了。在您的示例中,确实需要指定d/m/y H:i:s
,否则顺序将不正确(并且您可以使用*
代替空格,因此T
也可以使用),但是{{1} }是没有用的,Y-m-d
会妥善处理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。