更改 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_at
和 updated_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/y
或 d-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 中以页面的形式更改“视图”的“日期字段”格式?