Формат временной метки Laravel/дата JavaScript

Я осмотрелся, но не смог найти четкий способ возврата временных меток Laravel/даты и времени в определенном формате. Для меня не имеет значения, как они сохраняются в базе данных, но когда я извлекаю данные, я хотел бы отформатировать их, чтобы их можно было проанализировать с помощью JavaScript. Кто-нибудь знает хороший способ, который не требует создания нескольких средств доступа?

Изменить: чтобы добавить больше деталей, я на самом деле использую AngularJS и хотел бы, чтобы дата возвращалась в формате, чтобы ее можно было понять Angular и его фильтром даты. Насколько я могу судить, в текущем формате фильтр даты не работает, потому что он не может разобрать дату.


person kenshin9    schedule 12.11.2015    source источник
comment
Как вы собираетесь анализировать их с помощью JavaScript? Вы никогда не должны анализировать строки с помощью встроенного конструктора даты ECMAScript или метода Date.parse, поскольку они в значительной степени зависят от реализации и, как известно, непостоянны. Самый надежный метод — предоставить значение времени (например, значение времени UNIX), которое может быть преобразуется очень легко.   -  person RobG    schedule 12.11.2015
comment
Ах, я не знал, что конструктор Date ненадежен. Я думаю, что основная проблема заключается в том, что объект даты JavaScript не может быть создан с использованием формата времени, который возвращает Laravel.   -  person kenshin9    schedule 12.11.2015
comment
Легко написать простой синтаксический анализатор (2 или 3 строки), если строка имеет определенный формат.   -  person RobG    schedule 12.11.2015
comment
Вы решили проблему?   -  person Peter Kota    schedule 14.11.2015


Ответы (3)


Чтобы определить аксессор, создайте метод getFooAttribute в своей модели, где Foo — это имя столбца в «верблюжьем» регистре, к которому вы хотите получить доступ. Итак, вы должны определить аксессор для атрибута test_date (или любого другого). Аксессор будет автоматически вызываться Eloquent при попытке получить значение test_date.

(В примере я определю это в модели пользователя)

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


Если вы хотите написать более простой код, вам следует использовать свойства.

Давайте определим DateTrait в файле App\DateTrait.php:

<?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;
...
}
person Peter Kota    schedule 12.11.2015
comment
Я подумал, что это сработает. Есть ли способ применить формат ко всем временным меткам? У меня есть другие столбцы DateTime с разными именами столбцов, но я хотел бы, чтобы то же самое было выполнено без необходимости создавать все эти средства доступа. - person kenshin9; 12.11.2015

На ваш взгляд, просто сделайте что-то вроде этого:

$variable->created_at->format('m-d-y')
person odannyc    schedule 12.11.2015
comment
Я отредактировал свой вопрос, сделав его более конкретным, но я использую AngularJS, поэтому для этого проекта нет Blade. - person kenshin9; 12.11.2015

Эта страница здесь может быть полезна для ознакомления с углеродными датами и тем, как вы можете использовать и форматировать их.

Что касается их синтаксического анализа в формате, который может интерпретировать Javascript, возможно, вы могли бы сделать что-то вроде этого - предполагая, что он исходит от красноречивого объекта, который вы втянули в представление, или что-то в этом роде:

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

Что вернет такую ​​​​дату, как эта September 02, 2015 09:43am, хотя я не уверен в точном формате, который вам понадобится для синтаксического анализа в javascript.

person James    schedule 12.11.2015