【问题标题】:ISO 8601 parsing validation in CarbonCarbon 中的 ISO 8601 解析验证
【发布时间】:2020-11-24 13:34:12
【问题描述】:

我正在通过 ajax 将日期传递给我的后端。日期采用 ISO 8601 格式和 UTC(例如 2017-07-04T23:21:37.000000Z)。我将传递这个字符串来创建一个碳实例。如果我传递的字符串不是 ISO 8601 格式,有没有办法让 carbon 抛出异常?基本上我正在寻找类似的功能

时刻(“2017-07-04T23:21:37.000000Z”);

对于momentjs或

parseISO("2017-07-04T23:21:37.000000Z");

对于日期-fns。 Carbon::parse 方法接受许多可接受的格式,因此在我的用例中不好。

【问题讨论】:

  • 我不认为它有,但你总是可以使用 parse 创建日期,然后查看toIso8601String() 是否等于传入的字符串。

标签: php date php-carbon iso8601


【解决方案1】:

您可以使用 Carbon::createFromFormat。 Carbon 是 DateTime 的扩展。我用 DateTime 展示它,所以它对每个人都可以重现。

$strISO8601 = "2017-07-04T23:21:37.000000Z";
$format = "Y-m-d\TH:i:s.uO";
$dateTime = DateTime::createFromFormat($format, $strISO8601);

如果格式不正确,则结果为假。

来自 Carbon Doc:

Carbon::createFromFormat() 是基本 php 函数 DateTime::createFromFormat 的包装器。区别在于 $tz 参数可以是 DateTimeZone 实例或字符串时区值。此外,如果格式有错误,此函数将调用 DateTime::getLastErrors() 方法,然后抛出 InvalidArgumentException 并将错误作为消息。

【讨论】:

  • 如果你想抛出异常,可以通过简单的if($dateTime === false) throw new Exception()来完成。
  • Carbon 本身会引发异常。我在答案中添加了 Carbon-Doc 的摘录。
猜你喜欢
  • 2019-08-26
  • 2013-05-14
  • 2012-04-20
  • 1970-01-01
  • 2011-06-17
  • 2014-07-16
  • 2020-09-08
  • 1970-01-01
  • 2013-04-05
相关资源
最近更新 更多