我完全被困在了用angular前端进行php-api交换日期的尝试中。
从PHP到JS,我似乎已经整理好了。由于Laravel通过Carbon处理日期,我刚刚在app.php中添加了'Carbon'Carbon::setToStringFormat('c');
,使日期符合ISO8601。
PHP示例:
2015-02-04 00: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控制器中生成碳日期
$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中的变量,它将不起作用: