Laravel 5: 设置或获取数据库中的日期格式
Laravel 5: Set or get date format in DB
我无法理解 Laravel 如何处理日期和 Carbon。我有一个模型,它有一个名为 published_at 的特殊字段(它是 DATE 字段)。当我将实例保存为对象时,我希望 laravel 使用 carbon 转换该字段。
这是我的模型:
<?php
namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class Addon extends Model
{
// ...
protected $dates = [
'published_at'
];
// ....
/**
* Set the published_at date format
*
* @param $date
* @return string
*/
public function setPublishedAtAttribute($date)
{
$this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y', $date);
}
// ....
}
因此,根据我的理解,published_at 字段现在应该使用 d/m/Y 格式保存为 carbon 的实例。但是它在数据库中保存为 mm-dd-yyyy。
最后,我不关心它是如何保存到数据库中的,所以这就是为什么我想创建一个 getPublishedAtAttribute
并以我想要的格式检索它。那也没用。
我只想Laravel格式化它d/m/Y。每当我展示它时,我都不必做类似 {{ $addon->published_at->format('d/m/Y') }}
的事情。
顺便说一句:我想要 created_at
和 updated_at
同样的东西。知道我做错了什么吗?
Laravel版本:5.3.31
我建议你不要乱用这样的日期格式,而是创建一个这样的访问器..
public function getFormattedPublishedAtAttribute() {
return $this->published_at->format('d/m/Y');
}
这样,您可以使用默认日期,也可以使用..
单独获取格式化日期
$model->formattedPublishedAt;
您必须在 Carbon 指令中设置格式日期:
$this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y', $date)->format('Y-m-d');
好吧,在进一步挖掘之后,我这样做了:
public function getPublishedAtAttribute($date)
{
$date = new Carbon($date);
return $date->format('d/m/Y');
}
这是有效的。但是我不明白为什么我必须做 $date = new Carbon($date);
才能让它发挥作用。如果我省略它,我会得到 Call to a member function format() on string
。 (尝试使用 published_at
、created_at
和 updated_at
,都一样)。
但是因为 published_at
在我的 $dates = [];
数组中,它不应该被自动视为碳实例吗? created_at
和 updated_at
?
更是如此
但据我所知,事实并非如此。如果我 dd($addon->created_at);
它只是一个字符串,而不是碳实例(如果我省略了 $date = new Carbon($date);
)。
我无法理解 Laravel 如何处理日期和 Carbon。我有一个模型,它有一个名为 published_at 的特殊字段(它是 DATE 字段)。当我将实例保存为对象时,我希望 laravel 使用 carbon 转换该字段。
这是我的模型:
<?php
namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class Addon extends Model
{
// ...
protected $dates = [
'published_at'
];
// ....
/**
* Set the published_at date format
*
* @param $date
* @return string
*/
public function setPublishedAtAttribute($date)
{
$this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y', $date);
}
// ....
}
因此,根据我的理解,published_at 字段现在应该使用 d/m/Y 格式保存为 carbon 的实例。但是它在数据库中保存为 mm-dd-yyyy。
最后,我不关心它是如何保存到数据库中的,所以这就是为什么我想创建一个 getPublishedAtAttribute
并以我想要的格式检索它。那也没用。
我只想Laravel格式化它d/m/Y。每当我展示它时,我都不必做类似 {{ $addon->published_at->format('d/m/Y') }}
的事情。
顺便说一句:我想要 created_at
和 updated_at
同样的东西。知道我做错了什么吗?
Laravel版本:5.3.31
我建议你不要乱用这样的日期格式,而是创建一个这样的访问器..
public function getFormattedPublishedAtAttribute() {
return $this->published_at->format('d/m/Y');
}
这样,您可以使用默认日期,也可以使用..
单独获取格式化日期$model->formattedPublishedAt;
您必须在 Carbon 指令中设置格式日期:
$this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y', $date)->format('Y-m-d');
好吧,在进一步挖掘之后,我这样做了:
public function getPublishedAtAttribute($date)
{
$date = new Carbon($date);
return $date->format('d/m/Y');
}
这是有效的。但是我不明白为什么我必须做 $date = new Carbon($date);
才能让它发挥作用。如果我省略它,我会得到 Call to a member function format() on string
。 (尝试使用 published_at
、created_at
和 updated_at
,都一样)。
但是因为 published_at
在我的 $dates = [];
数组中,它不应该被自动视为碳实例吗? created_at
和 updated_at
?
但据我所知,事实并非如此。如果我 dd($addon->created_at);
它只是一个字符串,而不是碳实例(如果我省略了 $date = new Carbon($date);
)。