如何处理php(LaravelAPI)和javascript(AngularJS)之间的日期时间
我完全无法用angular前端制作php api交换日期 从PHP到JS,我似乎对它进行了排序。由于Laravel通过Carbon处理日期,我刚刚添加了如何处理php(LaravelAPI)和javascript(AngularJS)之间的日期时间,javascript,php,angularjs,date,laravel,Javascript,Php,Angularjs,Date,Laravel,我完全无法用angular前端制作php api交换日期 从PHP到JS,我似乎对它进行了排序。由于Laravel通过Carbon处理日期,我刚刚添加了\Carbon\Carbon::setToString格式('c')到app.php,使日期显示在ISO 8601中 PHP示例: 2015-02-04T00:53:51+02:00 AngularJS日期过滤器似乎也能很好地理解这种格式,甚至能正确读取时区 我尚未开始工作的是将JS日期对象发布回PHPAPI JS示例: 2015-02-05T1
\Carbon\Carbon::setToString格式('c')代码>到app.php,使日期显示在ISO 8601中
PHP示例:
2015-02-04T00:53:51+02:00
AngularJS日期过滤器似乎也能很好地理解这种格式,甚至能正确读取时区
我尚未开始工作的是将JS日期对象发布回PHPAPI
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::parse('2015-02-05T14:50:55+01:00');
使用带有moment.js的javascript
1) 在Laravel控制器中制作碳日期
$date_from = Carbon::now();
return view('reports', compact('date_from'));
2) 你需要在角Contoller中初始化日期
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) 使用它
4) 不要尝试在ng init中初始化变量,它将不起作用:Javascript没有对时区的本机支持,这使得日期处理有时非常烦人。您可能想看看哪一个是真正好的时间操纵库。本文()还描述了这些问题,以及它们是如何着手解决的。祝你好运因为我使用的是LumX前端gui框架,所以我认为momentJs已经在其中纠缠不清了。如果我怀疑浏览器不会自动将我的时间转换为UTC,那么时区就不重要了。谢谢你的文章。我会处理好它,然后再报告。@JoelHinz谢谢你的链接。它对这个问题有很好的解释,对如何解决这个问题有很好的推理。但由于我实际上对时区不太感兴趣,只是因为在浏览器中输入的日期在某种程度上以UTC结束,我不得不处理它们,所以我将研究更简单的时刻(datetime).format()解决方案。难以置信correctTime=矩(utcTime).format()代码>是将字符串恢复到正确时区所需的全部内容。谢谢你@micha的回答。这一天过得很好。作为一个警告,这仍然需要属性设置器,以便雄辩地完全识别格式,因为它处理传入日期的设置方式没有将此作为选项public function setstartsattribute($value){$this->attributes['starts_at']=Carbon::parse($value);}
你真的救了我一命,非常感谢!
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
}]);
<input type="date" class="form-control" ng-model="start_date">