【问题标题】:PHP using Laravel 4 and Carbon will not print out a DateTime field from my Database使用 Laravel 4 和 Carbon 的 PHP 不会从我的数据库中打印出 DateTime 字段
【发布时间】:2013-09-01 17:39:36
【问题描述】:

我正在使用 Laravel 4 构建一个 PHP 应用程序。

但是,当我尝试从数据库中打印出 DateTime 记录时,我遇到了错误。

{{ $user->created_at }}

给我这个错误

无效参数异常
跟踪数据
打开:E:\Server\htdocs\projects\timeclock\www\vendor\nesbot\carbon\src\Carbon\Carbon.php

非常沮丧!

该数据库字段的示例值为:2013-08-31 20:50:25

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您缺少时间戳上的毫秒数据,您需要使用:

    Carbon::createFromFormat('Y-m-d H:i:s.u', $value)->format('d/m/Y H:i:s');
    

    【讨论】:

      【解决方案2】:

      你必须format它:

      {{ $user->created_at->format('h:i:s') }}
      

      The PHP docs 列出了所有可用作格式的代码。

      【讨论】:

      • 啊,但这并不能解决我的错误。更奇怪的是它在另一个 DateTime 字段上运行良好,只是这 1 个字段表现不佳,即使它看起来相同,只是名称与另一个字段不同
      • 目前我能找到的唯一解决方案是将我的表列重命名为一个新名称,现在它可以工作了。
      • Created_at 和 updated_at 是 Laravel 的“时间戳”功能的列名——雄辩的 ORM 对它们进行了特殊处理。您没有专门使用该功能吗?
      • @fideloper - “雄辩的 ORM 特别对待它们”是什么意思? AFAIK,如果你不创建自己的 getDates 方法,Eloquent 会自动将这些列转换为 Carbon 的实例,在这种情况下 ->format() 应该可以工作。我错过了什么吗?
      • 我没有使用内置功能,而是在数据库中创建了自己的 created_at 列,并将其设置为日期时间而不是时间戳。无论如何我现在已经重命名了,所以没有混淆
      【解决方案3】:

      我也有同样的问题。

      我发现这是由我在数据库中的时间戳数据引起的。

      2013-12-13 22:40:50.561709

      2013-12-13 22:40:50

      【讨论】:

        【解决方案4】:

        带有毫秒的时间戳值会导致此问题。

        转换为 Carbon 对象的列不能有毫秒时间戳。(默认值:created_at,updated_at)。 http://readouble.com/laravel/4/2/0/en/eloquent.html#date-mutators

        如果不需要 Carbon 对象,您可以禁止自动转换。

        class SomeModel extends Eloquent {
        
            public function getDates()
            {
                return array();
            }
        }
        

        但它也使 Carbon 方法(例如:->format())不可用。您必须以其他方式格式化时间戳。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-17
          相关资源
          最近更新 更多