Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理php(LaravelAPI)和javascript(AngularJS)之间的日期时间_Javascript_Php_Angularjs_Date_Laravel - Fatal编程技术网

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

如何处理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

我完全无法用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-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">