【问题标题】:How can I account for inconsistent dateFormats in Carbon/Laravel?如何解释 Carbon/Laravel 中不一致的日期格式?
【发布时间】:2017-08-25 01:56:14
【问题描述】:

我继承了一个 Laravel 5 应用程序,该应用程序使用了以前属于 Rails 应用程序的数据库。结果,在日期列(created_atupdated_at 等)中,日期格式不一致,考虑到 Laravel 的 Carbon 集成,我正在尝试确定如何解决此问题。

Rails 应用程序存储日期如下:2017-01-17 23:02:51+00

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

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

Unexpected data found. Data missing

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

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

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

非常欢迎任何建议!

【问题讨论】:

    标签: php laravel date php-carbon


    【解决方案1】:

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

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

    【讨论】:

    • 正是我想要的。谢谢!
    【解决方案2】:

    我建议您创建一个脚本来遍历数据库,获取 created_at 值,并将它们标准化。这样一来,它们都是相同的,您不必担心在代码中添加/删除文本。

    【讨论】:

    • 这是我目前特别想避免的事情,因为它是一个大型应用程序,我希望能够在直接修改数据之前先测试边缘情况。
    猜你喜欢
    • 2021-11-30
    • 2016-12-01
    • 2018-04-20
    • 2023-01-05
    • 1970-01-01
    • 2016-02-28
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多