【问题标题】:Change automatically the format of date fields (Laravel)自动更改日期字段的格式(Laravel)
【发布时间】:2018-09-10 18:03:32
【问题描述】:

我正在寻找一个更改日期格式的 DateTime Mutator,我正在使用 Oracle DB,并且承认的格式是 (DD/MM/YYYY),输入类型为“日期” " 以 (YYYY,MM,DD) 格式存储日期。

我找到了 Torzer 的 $date 函数和一个 trait,但我必须指出我想要转换格式的字段。

是否有一些特征或功能可以检测所有日期字段并将它们自动转换为格式(DD/MM/YYYY)?这没有指明字段。

现在我在模型中使用受保护的 $date:

protected $dates = [ 'fecha_nac', 'fecha_nac1', 'fecha_nac2', ];

【问题讨论】:

  • 自己在模型上专门定义日期字段有什么问题?

标签: php oracle laravel date mutators


【解决方案1】:

默认情况下,laravel 使用日期格式 'Y-m-d H:i:s' 如果你想使用不同的格式,你可以通过以下方式在你的模型中自定义它。

    protected $dateFormat = 'your date formate';

在你的情况下,它会是。

    protected $dateFormat = 'd-m-Y';

【讨论】:

    【解决方案2】:

    您可以覆盖 HasAttributes 特征上的 getDates 方法。

    /**
     * Get the attributes that should be converted to dates.
     *
     * @return array
     */
    public function getDates()
    {
        $defaults = [static::CREATED_AT, static::UPDATED_AT];
    
        return $this->usesTimestamps()
                    ? array_unique(array_merge($this->dates, $defaults))
                    : $this->dates;
    }
    

    在您的模型上:

    public function getDates()
    {
        $dates = parent::getDates();
    
        // add your dynamic logic here
    
        return $dates;
    }
    

    我真的会明确定义应该转换哪些字段,因为如果您经常使用模型,这些动态操作可能会很昂贵。

    【讨论】:

    • 您好,但是如果我有 10 个具有 10 个不同日期字段的模型怎么办?而不是两个静态字段。我需要为每个日期字段创建函数吗?
    • 您可以使用$dates 属性静态定义每个模型上的哪些字段是日期(这很干净),或者您可以有一些自定义逻辑(假设日期字段以@为前缀987654326@) 并重写 getDates 方法以搜索此模式并将字段动态添加到 $dates 数组。您可以在模型上声明这些属性/方法,而无需使用 trait btw。
    猜你喜欢
    • 2023-03-27
    • 2017-08-29
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多