如何处理 php (Laravel api) 和 javascript (AngularJS) 之间的日期时间

How to handle datetime between php (Laravel api) and 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 日期格式以毫秒添加到字符串结束,在默认配置中 Carbon 抱怨尾随数据。

此外,浏览器似乎会自动将我的日期转换为 UTC 时间。

起初手动使用 new Carbon('jsDateString') 似乎可行,但仔细检查时区数据未被考虑。

所以我的问题是,将日期从 AngularJS 前端发送回 Laravel php api 的最佳和最自动的解决方案是什么?

$dt = Carbon::now();
echo $dt->toW3cString();       // 2015-02-05T14:50:55+01:00

因为 carbon 可以打印它也可以解析这种格式

Carbon::parse('2015-02-05T14:50:55+01:00');

在 javascript 和 moment.js momentjs.com

moment().format(); // 2015-02-05T14:50:55+01:00

1) 在 Laravel 控制器中创建 Carbon 日期

$date_from = Carbon::now();
return view('reports', compact('date_from'));

2) 您需要在 Angular conctoller

中初始化 Date
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 中初始化变量,它不会工作: