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 日期的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 的时间戳有奇怪的返回格式

laravel 如何呈现模型数据

使用 touch() 更新 laravel 中自定义时间戳字段的时间戳

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

更新而不触及时间戳(Laravel)

根据时间戳 laravel 5 生成唯一 id