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

Posted

技术标签:

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

【问题讨论】:

【参考方案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 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 ,你会看到你想要的格式。

【讨论】:

同意这是 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-d。 php.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');

希望对你有帮助!

【讨论】:

以上是关于更改 laravel 视图页面中的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Drupal 中以页面的形式更改“视图”的“日期字段”格式?

在 Laravel 迁移中更改日期格式

Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()

日期格式更改从视图到控制器的传递日期

更改默认日期格式 laravel sql 查询

如何将Laravel输出的日期格式更改为JSON?