如何解释 Carbon/Laravel 中不一致的日期格式?

How can I account for inconsistent dateFormats in Carbon/Laravel?

我继承了一个 Laravel 5 应用程序,该应用程序使用以前属于 Rails 应用程序的数据库。结果,在日期列(created_atupdated_at 等)中,日期格式不一致,考虑到 Laravel's碳整合。

Rails 应用程序存储这样的日期:2017-01-17 23:02:51+00

Laravel 应用程序包括微秒,因此日期如下所示:2017-01-17 23:02:51.451741+00

问题是 Laravel 通过 Carbon 运行它的所有日期函数,Carbon 根据全局 $dateFormat 解析它们,导致 Rails 生成的日期抛出以下内容错误:

Unexpected data found. Data missing

我的第一个想法是尝试检测模型级别是否存在微秒,如果没有,将 .000000 添加到日期字符串中,这样 Carbon 就可以很好地发挥作用并且数据保持完整。

不幸的是,$this->created_at 的日期似乎首先通过 Carbon,所以这似乎是一个死胡同。另一个问题是我不确定是否还有其他可能潜伏的日期格式。

我想避免直接编辑任何数据(至少在我更熟悉代码库之前),但我不知道用 Carbon 处理多种格式的最佳方法。

非常欢迎任何建议!

我建议您创建一个脚本来遍历数据库,获取 created_at 值,并对它们进行标准化。这样它们都是一样的,您就不必担心代码中的 adding/removing 文本。

要检索 created_at 的原始值,您可以在模型中使用 $this->attributes['created_at']

这将使您能够将访问器应用于 $this->created_at,如果您愿意的话。