web-dev-qa-db-ja.com

PHP(Laravel API)とJavaScript(AngularJS)の間の日時を処理する方法

angularフロントエンドでphp apiの日付を交換しようとするのはまったく行き詰まっています。

PHPからJSへとソートされているようです。LaravelはCarbonを介して日付を処理するので、app [phpに\Carbon\Carbon::setToStringFormat('c');を追加しましたISO 8601で日付を出力します。

PHPの例:

2015-02-04T00: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に日付を送信するための最良かつ最も自動の解決策は何でしょうか?

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

カーボンはそれを印刷できるので、このフォーマットを解析することもできます

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

javaScriptでmoment.js momentjs.com

moment().format(); // 2015-02-05T14:50:55+01:00
25
micha

1)Laravelコントローラでカーボンデートを作成する

$date_from = Carbon::now();
return view('reports', compact('date_from'));

2)Angularコントローラーで日付を初期化する必要があります

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で変数を初期化しようとしないでください、機能しません:

0