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

How to handle datetime between php (Laravel api) and javascript (AngularJS)

本文关键字:之间 AngularJS 日期 时间 javascript Laravel-api 何处理 处理 php      更新时间:2023-09-26

我完全被困在了用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中的变量,它将不起作用: