【问题标题】:change the date format in laravel view page [duplicate]更改 laravel 视图页面中的日期格式
【发布时间】: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')}}

【问题讨论】:

    标签: php laravel date


    【解决方案1】:

    试试这个:

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

    它将日期转换为d-m-Y 或您提供的任何格式。

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

    【讨论】:

    • @user3386779:它有效,但不是最漂亮的解决方案 :) Laravel 很少有机制来做这件事。如果您选择我的答案,您需要在一个地方设置日期格式,并且不需要记住每次需要显示from_date 列时都更改日期格式。
    • @MarekSkiba 我在回答中提到了同样的事情:)
    • 例如如何更改语言 -> 'es' 表示月份名称
    • 同意@sadiq 你应该使用 $user->from_date->format('d/m/Y')
    • 伟大且非常简单的解决方案。
    【解决方案2】:

    在 Laravel 中使用 Carbon 很好

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

    【讨论】:

    • 是的,当 $user->from_date 是 null 时呢?
    • @lewis4u 如果您将空值传递给parse(null),它将转换为当前日期时间
    • 正确...这在某些情况下并不好!所以要小心!
    【解决方案3】:

    在您的模型集中:

    protected $dates = ['name_field'];
    

    在你看来之后:

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

    作品

    【讨论】:

    • 我认为这是最“laravel 方式”,所以这应该被标记为正确答案。
    • 我也同意,这是最好的办法
    • 它对我不起作用。我已经在日期时间列类型和时间戳列类型上,但错误仍然Call to a member function format() on null
    • 这应该是最佳答案
    • 如果您在模型中使用 Laravel 的时间戳,那么 created_atupdated_at 字段将已经合并到 $dates 中,因此无需在模型中添加这些特定字段。这至少在 Laravel 8 中!
    【解决方案4】:

    您可以查看Date Mutatorshttps://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 }},你会看到你想要的格式。

    【讨论】:

    • 同意这是 laravel 的更好方法
    • 唯一的缺点是它会返回一个字符串给视图;因此,如果您想在同一视图中显示不同的日期格式,则必须使用 Carbon 重新解析日期。
    • 抱歉,这是一个 Mutator,因为它使用 getFromDateAttribute 而不是 setFromDateAttribute。据我所知,mutator 使用 set,accessor 使用 get
    • 如果该列为空,则返回当前日期
    • 如果您试图在其他地方获取该属性,这将产生问题。
    【解决方案5】:

    刀片模板中易于使用的日期使用 Carbon 那样

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        方法一:

        使用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 
        

        【讨论】:

          【解决方案8】:

          您可以使用Carbon::createFromTimestamp

          刀片

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

          【讨论】:

            【解决方案9】:

            我遇到了类似的问题,我想更改格式,但我也希望能够灵活地在刀片模板引擎中更改格式。

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

            <?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'); 全局(静态)设置格式,而不是在模型上。
            【解决方案10】:

            我建议使用isoFormat 以获得更好的网页外观。

            {{ \Carbon\Carbon::parse($blog->created_at)->isoFormat('MMM Do YYYY')}}
            

            结果是

            2021 年 1 月 21 日

            Carbon Extension

            【讨论】:

            • 它对我有用
            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

              在刀片文件上使用 Carbon 非常简单且有用。

              使用下面的语法也可以得到它的 AM 或 PM

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

              **A 将用于表示 AM/PM **

              【讨论】:

                【解决方案13】:

                这是我的做法 {{ date("d M 'y", strtotime($variable->date)) }}

                【讨论】:

                • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                【解决方案14】:

                有时更改日期格式无法正常工作,尤其是在 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
                【解决方案15】:

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

                希望对你有帮助!

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-08-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-08-14
                  • 2016-09-05
                  • 1970-01-01
                  相关资源
                  最近更新 更多