Как обрабатывать datetime между php (Laravel api) и javascript (AngularJS)
Я полностью застреваю, пытаясь сделать даты обмена php api с интерфейсом angular.
От PHP до JS, похоже, он отсортирован. Поскольку Laravel обрабатывает даты через Carbon, я просто добавил \Carbon\Carbon::setToStringFormat('c');
в app.php, что делает даты в ISO 8601.
Пример PHP:
2015-02-04T00: 53: 51 + 02: 00
Фильтр даты AngularJS также, похоже, хорошо понимает этот формат и даже правильно считывает часовой пояс.
То, что я еще не получил, - это отправлять объекты даты JS обратно на PHP api.
Пример JS:
2015-02-05T13: 00: 00.000Z
Формат даты Javascript заканчивается миллисекундами, добавленными в строку и в конфигурации по умолчанию. Углерод жалуется на конечные данные.
Также браузеры автоматически переводят мои даты в UTC.
Вручную с использованием new Carbon('jsDateString')
, похоже, работает сначала, но при более близком осмотре данные о часовом поясе не рассматриваются.
Итак, мой вопрос заключается в том, что было бы лучшим и самым автоматическим решением для отправки дат в Laravel php api из интерфейса AngularJS?
Ответы
Ответ 1
$dt = Carbon::now();
echo $dt->toW3cString(); // 2015-02-05T14:50:55+01:00
так как углерод может печатать его, он также может анализировать этот формат
Carbon::parse('2015-02-05T14:50:55+01:00');
в javascript с moment.js momentjs.com
moment().format(); // 2015-02-05T14:50:55+01:00
Ответ 2
1) сделать дату карбона в контроллере Laravel
$date_from = Carbon::now();
return view('reports', compact('date_from'));
2) Вам нужно создать дату в Angular conctoller
rrApp.controller('reportsCtrl', ['$scope', '$filter', function($scope, $filter)
{
$scope.start_date = new Date("{{$date_from}}");
$scope.start_date = new Date($filter("date")($scope.start_date, 'yyyy-MM-dd'));// only date, no time
}]);
3) используйте его
<input type="date" class="form-control" ng-model="start_date">
4) НЕ пытайтесь инициализировать переменную в ng-init, это не сработает: