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

2022-08-30 21:02:59

我完全陷入了试图用有角的前端制作php api交换日期的困境。

从PHP到JS,我似乎已经解决了。由于Laravel通过Carbon处理日期,我刚刚添加到应用程序中.php这使得日期在ISO 8601中出现。\Carbon\Carbon::setToStringFormat('c');

示例:

2015-02-04T00:53:51 +02:00

AngularJS日期过滤器似乎也很好地理解了这种格式,甚至可以正确读取时区。

我还没有开始工作的是将JS日期对象发布回PHP api。

示例:

2015-02-05T13:00:00.000Z

Javascript日期格式最终将毫秒添加到字符串中,并且在默认配置中,Carbon抱怨尾随数据。

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

手动使用起初似乎有效,但在更仔细的检查时区数据不被考虑。new Carbon('jsDateString')

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


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

由于碳可以打印它,它也可以解析这种格式

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

在带有时刻的javascript中.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中初始化变量,它不起作用: