Laravel时间戳格式 / JavaScript日期

6
我找了很多资料,但没有发现一个清晰的方法可以返回特定格式的Laravel时间戳/日期时间。虽然我不是很在意它在数据库中保存的方式,但当我拉取数据时,我想要将其格式化,以便JavaScript可以解析。有没有人知道一种好的方法,不需要创建多个accessor?
编辑:为了增加更多细节,实际上我正在使用AngularJS,并希望以一种格式返回日期,以便Angular和它的日期过滤器能够理解。当前的格式不能被日期过滤器解析。

你如何打算让它们被“JavaScript解析”?您永远不应该使用内置的ECMAScript Date构造函数或Date.parse方法来解析字符串,因为它们在很大程度上依赖于实现,并且容易出问题。最可靠的方法是提供一个时间值(例如UNIX时间值),可以非常轻松地转换 - RobG
啊,我不知道 Date 构造函数不可靠。我认为主要问题是 JavaScript Date 对象无法使用 Laravel 返回的时间格式创建。 - kenshin9
如果字符串具有特定的格式,编写简单解析器(2或3行)就很容易。 - RobG
你解决了这个问题吗? - Peter Kota
3个回答

1
在您的看法中,只需像这样做:

$variable->created_at->format('m-d-y')

2
我编辑了我的问题以使其更具体,但是我正在使用AngularJS,因此在这个项目中没有Blade。 - kenshin9

1
要定义一个访问器,请在模型上创建一个名为getFooAttribute的方法,其中Foo是您想要访问的列的“驼峰”命名方式。 因此,您应该为test_date(或其他任何内容)属性定义一个访问器。当尝试检索test_date的值时,Eloquent将自动调用访问器。 (在示例中,我将在用户模型中定义它)
<?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类型,但列名不同,希望能够实现相同的效果,而不必创建所有这些访问器。 - kenshin9

0

这个链接可能对了解Carbon日期以及如何使用和格式化它们有所帮助。

关于将它们解析为Javascript可以解释的格式,也许你可以像这样做 - 假设它来自你从视图中提取的一个eloquent对象:

{{ (new Carbon\Carbon($dataPassedIn->created_at))->format('F d, Y H:ia') }}

这将返回一个日期,例如2015年9月2日上午09:43,但我不确定您需要解析到JavaScript的确切格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接