Laravel 时间戳格式 / JavaScript 日期
Posted
技术标签:
【中文标题】Laravel 时间戳格式 / JavaScript 日期【英文标题】:Laravel Timestamp Format / JavaScript Date 【发布时间】:2016-02-13 09:59:25 【问题描述】:我环顾四周,但未能找到以特定格式返回 Laravel 时间戳/日期时间的明确方法。它如何保存在数据库中对我来说并不重要,但是当我提取数据时,我想对其进行格式化,以便它可以被 javascript 解析。有人知道不需要创建多个访问器的好方法吗?
编辑:为了添加更多细节,我实际上正在使用 AngularJS,并希望以某种格式返回日期,以便 Angular 及其日期过滤器可以理解它。使用当前格式,日期过滤器不起作用,因为它无法解析日期,据我所知。
【问题讨论】:
你打算如何让它们“被 JavaScript 解析”?你永远不应该使用内置的 ECMAScript Date 构造函数或 Date.parse 方法来解析字符串,因为它们很大程度上依赖于实现并且出了名的善变。最稳健的方法是提供一个时间值(例如 UNIX 时间值),它可以是 converted very easily。 啊,我不知道 Date 构造函数不可靠。我认为主要问题是无法使用 Laravel 返回的时间格式创建 JavaScript Date 对象。 如果字符串是特定格式的,编写一个简单的解析器(2或3行)很容易。 问题解决了吗? 【参考方案1】:要定义访问器,请在您的模型上创建一个getFooAttribute
方法,其中 Foo 是您希望访问的列的“骆驼”大小写名称。
因此,您应该为test_date
(或任何其他)属性定义一个访问器。在尝试检索 test_date
的值时,Eloquent 会自动调用访问器。
(在示例中我将在 User 模型中定义它)
<?php
namespace App;
use Carbon\Carbon;
class User extends Model
protected $table = 'users';
public function getTestDateAttribute($date)
//What format do you store in db?
$storedformat = createFromFormat('Y-m-d H:i:s', $date);
//What format would you like to show?
$customformat = $storedformat->format('Y.m.d. H:i:s');
return $customformat;
然后你会默认看到如下格式:
$user = User::find(1);
$user->test_date; //2015.11.12. 8:50:20
如果您想编写更简单的代码,您应该使用Traits。
让我们在 App\DateTrait.php
文件中定义 DateTrait:
<?php
trait DateTrait
public function getTestDateAttribute($date)
//What format do you store in db?
$storedformat = createFromFormat('Y-m-d H:i:s', $date);
//What format would you like to show?
$customformat = $storedformat->format('Y.m.d. H:i:s');
return $customformat;
然后在您希望格式化test_date
列的每个模型中使用它。
<?php
namespace App;
use Carbon\Carbon;
class User extends Model
use App\DateTrait;
...
【讨论】:
我认为这可行。有没有办法让格式适用于所有时间戳?我还有其他列名称不同的 DateTime 列,但希望在不必创建所有这些访问器的情况下完成相同的事情。【参考方案2】:在您看来,只需执行以下操作:
$variable->created_at->format('m-d-y')
【讨论】:
我编辑了我的问题更具体,但我使用的是 AngularJS,所以这个项目没有 Blade。【参考方案3】:此页面here 可能有助于熟悉碳日期以及如何使用和格式化它们。
关于将它们解析为 Javascript 可以解释的格式,也许你可以做这样的事情 - 假设它来自你拉入视图的雄辩对象或类似的东西:
(new Carbon\Carbon($dataPassedIn->created_at))->format('F d, Y H:ia')
这会返回像这样的日期September 02, 2015 09:43am
,尽管我不确定解析为 javascript 所需的确切格式。
【讨论】:
以上是关于Laravel 时间戳格式 / JavaScript 日期的主要内容,如果未能解决你的问题,请参考以下文章
使用 touch() 更新 laravel 中自定义时间戳字段的时间戳