在laravel视图页面中更改日期格式


95

我想更改从数据库中获取的日期格式。现在我得到了2016-10-01 {{$user->from_date}}。我想在laravel 5.3中更改格式'dmy'

{{ $user->from_date->format('d/m/Y')}}

Answers:


149

尝试这个:

date('d-m-Y', strtotime($user->from_date));

它将日期转换成d-m-Y您指定的格式。

注意:此解决方案是适用于php及其任何框架的常规解决方案。对于Laravel特定的方法,请尝试Hamelraj提供的解决方案。


2
@ user3386779:它可以工作,但不是最漂亮的解决方案:) Laravel很少有机制可以执行此操作。如果选择我的答案,则需要将日期格式设置在一个位置,并且不必记住每次需要显示from_date列时都要更改日期格式。
Marek Skiba

@MarekSkiba我在回答中也提到了同样的事情:)
Mayank Pandeyz '18

例如,如何更改语言->'es'表示月份名称
AlbertoAcuña,

1
同意@sadiq,您应该使用$ user-> from_date-> format('d / m / Y')
Erik Larsson,

1
很棒且非常简单的解决方案。
Muddasirir

130

在Laravel中使用Carbon的好处

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}

是的,当$ user-> from_date是什么时候null呢?
lewis4u

1
@ lewis4u如果您传递空值parse(null),它将转换为当前日期时间
Hamelraj

1
是的...这在某些情况下是不好的!所以小心!
lewis4u

78

在您的模型集中:

protected $dates = ['name_field'];

在您看来:

{{ $user->from_date->format('d/m/Y') }}

作品


3
我认为这是执行此操作的最“ laravel方法”,因此应将其标记为正确答案。
CodeChuck

我也同意,这是最好的方法
JonaPkr

它对我不起作用。我会就datetime列类型和timestamp列类型提供Call to a member function format() on null
担保

36

您可以检查Date Mutatorshttps : //laravel.com/docs/5.3/eloquent-mutators#date-mutators

您需要在User模型列from_date中设置$dates数组,然后可以在其中更改格式$dateFormat

另一个选项也将此方法应用于您的User模型:

public function getFromDateAttribute($value) {
    return \Carbon\Carbon::parse($value)->format('d-m-Y');
}

然后在视图中查看是否运行,{{ $user->from_date }}您将看到所需的格式。


同意这是laravel的更好方法
limco

1
唯一的缺点是它将向视图返回一个字符串。因此,如果您想在同一视图中显示不同的日期格式,则必须使用Carbon重新解析日期。
JustCarty

抱歉,这是Mutator,因为它使用getFromDateAttribute而不是setFromDateAttribute。据我所知,mutator使用set而访问器使用get
Shulz

如果该
列为


11

您可以通过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);

10

方法一:

使用strtotime()to时间是将日期更改为给定格式的最佳格式。

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 

5

您可以使用 Carbon::createFromTimestamp

{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}

4

我有一个类似的问题,我想更改格式,但是我也想要能够在刀片模板引擎中更改格式的灵活性。

因此,我将模型设置如下:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

\Carbon\Carbon::setToStringFormat('d-m-Y');

class User extends Model
{
    protected $dates = [
        'from_date',
    ];
}

setToStringFormat会设置所有日期使用这种格式的这种模式。
对我来说,这样做的好处是,无需增变器,我就可以拥有自己想要的格式,因为有了增变器,该属性以字符串形式返回,这意味着在刀片模板中,如果我想更改模板中的格式:

{{ date('Y', strtotime($user->from_date)) }}

这不是很干净。

取而代之的是,该属性仍然作为Carbon实例返回,但是首先以所需的格式返回。
这意味着我可以在模板中编写以下更简洁的代码:

{{ $user->from_date->format('Y') }}

除了能够重新格式化Carbon实例之外,我还可以在模板的属性上调用各种Carbon方法。

这种方法可能受到疏忽;我要打赌,在模型顶部指定字符串格式以防影响其他脚本不是一个好主意。从目前为止我所看到的,还没有发生。它仅更改了该模型的默认Carbon。

在这种情况下,最好将Carbon格式重新设置为模型脚本底部的原始格式。这是一个想法,但是对于每个模型都有自己的格式都可以。
相反,如果每种模型的格式相同,则改为在AppServiceProvider中。这样只会使代码更整洁,更易于维护。


0

有时更改日期格式无法正常工作,尤其是在Laravel中。因此,在这种情况下,最好使用:

$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));

这样就可以避免出现类似“ 1970-01-01”的错误!


那不是laravel问题,与php有关。阅读以下内容:通过查看各个组成部分之间的分隔符,可以消除m/d/yd-m-y格式的日期的歧义:如果分隔符是斜杠(/),则m/d/y假定为美国人;相反,如果分隔符是破折号(-)或点(.),则采用欧洲d-m-y格式。但是,如果以两位数格式给出年份,并且分隔符为破折号(-),则日期字符串将解析为y-m-dphp.net/manual/en/function.strtotime.php
Mayank Pandeyz '20年

0

在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');

希望能帮助到你!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.