处理 php (Laravel API) 和 javascript (AngularJS) 之间的日期时间

Handle datetime between php (Laravel API) and javascript (AngularJS)

我正在尝试让我的 Laravel API 与我的 Angularjs 前端交换日期。

通过首先转换我的 mysql 日期时间初始值,它可以从 Laravel 到 JS:

2015-08-19 10:00:00

使用 $newdate = Carbon::parse($event['date'])->toATOMString(); 输出:

2015-08-19T10:00:00+00:00

,然后使用 event.date = new Date(event.date); 将其转换为 javascript 日期对象 (Angularjs),输出:

Date 2015-08-19T10:00:00.000Z

问题将我更新的 Javascript 日期对象发回我的 PHP API更新 mysql db(日期时间)中的值。 Carbon 不喜欢他返回的日期格式:

2015-08-19T11:00:00.000Z

而且我不确定该如何处理。我从 Laravel 日志中收到以下错误:exception 'InvalidArgumentException' with message 'Trailing data' … Carbon/Carbon.php:392

问题:我应该如何转换 php 中的上述格式化日期以便 Carbon 接受它?

我不需要记录秒数,所以我的 Laravel 模型会像这样处理日期:

 $this->attributes['date'] = Carbon::createFromFormat('Y-m-d H:i', $date);

这是我到目前为止尝试过的方法(没有成功)。我显然遗漏了一些东西并且不确定我在做什么。

/**
 * Store updates to event.
 *
 * @return Response
 */
public function update($id)
{   
    $event = Event::findOrFail($id);

    $date  = Request::get('jsdateobject');

    // ------------------------------------------------------------     
    // trying to handle following format: 2015-08-19T11:00:00.000Z
    // ------------------------------------------------------------

    // $date = Carbon::parse($date)->toATOMString();        // didn't work - outputs: 2015-08-19T11:00:00+00:00
    // $date = Carbon::parse($date)->toDateTimeString();    // didn't work - outputs: 2015-08-19 11:00:00
    // $date = Carbon::parse($date)->toW3cString();         // didn't work - outputs: 2015-08-19T11:00:00+00:00
    // $date = new Carbon($date);                           // didn't work - outputs: 2015-08-19 11:00:00
    $date = Carbon::createFromFormat('Y-m-d\TH:i:s.uO', $date); // didn't work - outputs: 2015-08-19 11:00:00

    $event->date = $date;
    $event->update();

    return Response::json(array('success'=>true));
}       

最初由 questionaire 自己发布,但他将答案发布到问题本身,所以在这里我正在编辑问题以使其更有意义他写道:

我终于去了

在我的 AngularJS 前端更新我的日期时间并将我的 JS 日期对象发布回我的 PHP API 后,我不知道如何使用以下日期格式:

2015-08-19T11:00:00.000Z

我一直收到异常

'InvalidArgumentException' with message 'Trailing data' … Carbon/Carbon.php:392 error.

我试过了

$date = Carbon::createFromFormat('Y-m-d\TH:i:s.uO', $date);

但这没有用。在意识到我的 Laravel 模型需要以下日期时间格式 Y-m-d H:i 后,我不得不对从 JS 收到的日期时间进行双重格式化。

$date = Carbon::createFromFormat('Y-m-d\TH:i:s.uO', $date);->format('Y-m-d H:i');

不确定这是最好的方法,但目前有效。