【发布时间】:2017-02-23 14:41:05
【问题描述】:
我想更改从数据库中获取的日期格式。
现在我得到了 2016-10-01{{$user->from_date}} 。我想在 laravel 5.3 中更改格式 'd-m-y'
{{ $user->from_date->format('d/m/Y')}}
【问题讨论】:
我想更改从数据库中获取的日期格式。
现在我得到了 2016-10-01{{$user->from_date}} 。我想在 laravel 5.3 中更改格式 'd-m-y'
{{ $user->from_date->format('d/m/Y')}}
【问题讨论】:
试试这个:
date('d-m-Y', strtotime($user->from_date));
它将日期转换为d-m-Y 或您提供的任何格式。
注意:此解决方案是适用于 php 及其任何框架的通用解决方案。对于 Laravel 特定的方法,请尝试Hamelraj 提供的解决方案。
【讨论】:
from_date 列时都更改日期格式。
在 Laravel 中使用 Carbon 很好
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
【讨论】:
null 时呢?
parse(null),它将转换为当前日期时间
在您的模型集中:
protected $dates = ['name_field'];
在你看来之后:
{{ $user->from_date->format('d/m/Y') }}
作品
【讨论】:
Call to a member function format() on null
created_at 和 updated_at 字段将已经合并到 $dates 中,因此无需在模型中添加这些特定字段。这至少在 Laravel 8 中!
您可以查看Date Mutators:https://laravel.com/docs/5.3/eloquent-mutators#date-mutators
您需要在$dates 数组中的User 模型列中设置from_date,然后您可以在$dateFormat 中更改格式
另一种选择也是将此方法添加到您的User 模型中:
public function getFromDateAttribute($value) {
return \Carbon\Carbon::parse($value)->format('d-m-Y');
}
然后如果你运行{{ $user->from_date }},你会看到你想要的格式。
【讨论】:
刀片模板中易于使用的日期使用 Carbon 那样
{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}
【讨论】:
您可以通过 3 种方式进行操作:
1) 使用 Laravel 模型
$user = \App\User::find(1);
$newDateFormat = $user->created_at->format('d/m/Y');
dd($newDateFormat);
2) 使用 PHP strtotime
$user = \App\User::find(1);
$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));
dd($newDateFormat2);
3) 使用碳
$user = \App\User::find(1);
$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');
dd($newDateFormat3);
【讨论】:
方法一:
使用strtotime() 来表示时间是将日期更改为给定格式的最佳格式。
strtotime() - 将任何英文文本日期时间描述解析为 Unix 时间戳
该函数期望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数),相对于给出的时间戳现在,如果没有提供现在,则为当前时间。
示例:
<?php
$timestamp = strtotime( "February 26, 2007" );
print date('Y-m-d', $timestamp );
?>
输出:
2007-02-26
方法二:
date_format() - 返回一个新的 DateTime 对象,然后格式化日期:
<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>
输出:
2013/03/15 00:00:00
【讨论】:
您可以使用Carbon::createFromTimestamp
刀片
{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}
【讨论】:
我遇到了类似的问题,我想更改格式,但我也希望能够灵活地在刀片模板引擎中更改格式。
因此,我将我的模型设置如下:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
\Carbon\Carbon::setToStringFormat('d-m-Y');
class User extends Model
{
protected $dates = [
'from_date',
];
}
setToStringFormat 将设置所有日期以为此模型使用此格式。
这对我来说的好处是,我可以在没有 mutator 的情况下获得我想要的格式,因为有了 mutator,属性作为字符串返回,这意味着在刀片模板中,如果我想的话,我必须写这样的东西更改模板中的格式:
{{ date('Y', strtotime($user->from_date)) }}
这不是很干净。
相反,该属性仍作为 Carbon 实例返回,但它首先以所需格式返回。
这意味着在模板中我可以编写以下更简洁的代码:
{{ $user->from_date->format('Y') }}
除了能够重新格式化 Carbon 实例之外,我还可以在模板中的属性上调用各种 Carbon 方法。
这种方法可能存在疏忽;我敢打赌,在模型顶部指定字符串格式不是一个好主意,以防它影响其他脚本。 就我目前所见,这还没有发生。它仅更改了该模型的默认 Carbon。
在这种情况下,最好将 Carbon 格式设置回模型脚本底部的原始格式。这是一个大胆的想法,但它适用于每个模型都有自己的格式。
相反,如果您对每个模型使用相同的格式,则改为在您的 AppServiceProvider 中。这只会使代码更整洁,更易于维护。
【讨论】:
\Carbon\Carbon::setToStringFormat('d-m-Y'); 全局(静态)设置格式,而不是在模型上。
我建议使用isoFormat 以获得更好的网页外观。
{{ \Carbon\Carbon::parse($blog->created_at)->isoFormat('MMM Do YYYY')}}
结果是
2021 年 1 月 21 日
【讨论】:
在 Laravel 8 中,您可以使用日期转换:https://laravel.com/docs/8.x/eloquent-mutators#date-casting
在您刚刚设置的模型中:
protected $casts = [
'my_custom_datetime_field' => 'datetime'
];
然后在您的刀片模板中,您可以使用format() 方法:
{{ $my_custom_datetime_field->format('d. m. Y') }}
【讨论】:
在刀片文件上使用 Carbon 非常简单且有用。
使用下面的语法也可以得到它的 AM 或 PM
{{ \Carbon\Carbon::parse($user->from_date)->format('d-m-Y / h:i:s A')}}
**A 将用于表示 AM/PM **
【讨论】:
这是我的做法 {{ date("d M 'y", strtotime($variable->date)) }}
【讨论】:
有时更改日期格式无法正常工作,尤其是在 Laravel 中。所以在这种情况下,最好使用:
$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));
那么你就可以避免像“1970-01-01”这样的错误!
【讨论】:
m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线 (/),则假定为美式 m/d/y;而如果分隔符是破折号(-) 或圆点(.),则假定为欧洲d-m-y 格式。但是,如果年份以两位数格式给出并且分隔符是破折号(-),则日期字符串将被解析为y-m-d。 php.net/manual/en/function.strtotime.php
在 Laravel 中,您可以在 app/Helper/helper.php 中添加一个函数,例如
function formatDate($date = '', $format = 'Y-m-d'){
if($date == '' || $date == null)
return;
return date($format,strtotime($date));
}
并在这样的任何控制器上调用此函数
$start_date = formatDate($start_date,'Y-m-d');
希望对你有帮助!
【讨论】: