最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

php - Laravel Timestamp FormatJavaScript Date - Stack Overflow

programmeradmin5浏览0评论

I've looked around, but haven't been able to find a clear way of returning Laravel timestamps / datetimes in a particular format. It doesn't really matter to me how it's saved in the database, but when I'm pulling the data, I'd like to format it so that it can be parsed by JavaScript. Does someone know of a good way that doesn't involve having to create multiple accessors?

Edit: To add more detail, I'm actually using AngularJS and would like the date returned in a format so that it can be understood by Angular and its date filter. With the current format, the date filter doesn't work because it can't parse the date, from what I can tell.

I've looked around, but haven't been able to find a clear way of returning Laravel timestamps / datetimes in a particular format. It doesn't really matter to me how it's saved in the database, but when I'm pulling the data, I'd like to format it so that it can be parsed by JavaScript. Does someone know of a good way that doesn't involve having to create multiple accessors?

Edit: To add more detail, I'm actually using AngularJS and would like the date returned in a format so that it can be understood by Angular and its date filter. With the current format, the date filter doesn't work because it can't parse the date, from what I can tell.

Share Improve this question edited Nov 12, 2015 at 7:00 kenshin9 asked Nov 12, 2015 at 6:04 kenshin9kenshin9 2,3754 gold badges29 silver badges42 bronze badges 4
  • How do you intend for them to be "parsed by JavaScript"? You should never parse strings using the built–in ECMAScript Date constructor or Date.parse method as they are largely implementation dependent and notoriously fickle. The most robust method is to supply a time value (e.g. UNIX time value) that can be converted very easily. – RobG Commented Nov 12, 2015 at 6:53
  • Ah, I wasn't aware that the Date constructor wasn't reliable. I think the main issue is that a JavaScript Date object can't be created using the time format Laravel returns. – kenshin9 Commented Nov 12, 2015 at 7:02
  • It's easy to write a simple parser (2 or 3 lines) if the string is in a specific format. – RobG Commented Nov 12, 2015 at 7:06
  • Do you solved the problem? – Peter Kota Commented Nov 14, 2015 at 12:30
Add a ment  | 

3 Answers 3

Reset to default 1

To define an accessor, create a getFooAttribute method on your model where Foo is the "camel" cased name of the column you wish to access. So, you should define an accessor for the test_date (or anything else) attribute. The accessor will automatically be called by Eloquent when attempting to retrieve the value of test_date.

(In the example I'll define it in the User model)

<?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;
    }
}

Then you'll see the following format by default:

$user = User::find(1);
$user->test_date; //2015.11.12. 8:50:20


If you'd like to write simplier code, you should use Traits.

Let's define the DateTrait in App\DateTrait.php file:

<?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;
    }
 }

Then use it every model where you'd like to format the test_date column.

<?php

namespace App;

use Carbon\Carbon;

class User extends Model {
    use App\DateTrait;
...
}

In your view just do something like this:

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

This page here may be useful for getting familiar with Carbon dates and how you can use and format them.

Regarding the parsing of them to a format Javascript can interpret, perhaps you could do something like this - assuming it is ing from an eloquent object you have pulled in to a view or something like that:

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

Which would return a date like this September 02, 2015 09:43am, although I'm not sure of the exact format you would need for parsing in to javascript.

发布评论

评论列表(0)

  1. 暂无评论