web-dev-qa-db-fra.com

Comment gérer la date/heure entre php (Laravel api) et javascript (AngularJS)

Je suis complètement coincé en train d'essayer de faire des dates d'échange d'api php avec une interface angulaire.

De PHP à JS, il semble que je l'ai trié. Puisque Laravel gère les dates via Carbon, je viens d’ajouter \Carbon\Carbon::setToStringFormat('c'); à app.php, ce qui permet de faire apparaître les dates dans ISO 8601.

Exemple PHP:

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

Le filtre de date AngularJS semble également bien comprendre ce format et lit même le fuseau horaire correctement.

Ce que je n'ai pas encore commencé à faire, c'est de poster les objets de date JS dans PHP api.

Exemple JS:

2015-02-05T13: 00: 00.000Z

Le format de date Javascript se termine avec l'ajout de millisecondes à la chaîne et, dans la configuration par défaut, Carbon se plaint des données de fin.

De plus, les navigateurs semblent traduire automatiquement mes dates en heure UTC.

L'utilisation manuelle de new Carbon('jsDateString') semble fonctionner au début, mais lors d'une inspection plus minutieuse, les données de fuseau horaire ne sont pas prises en compte.

Ma question est donc la suivante: quelle serait la solution la meilleure et la plus automatique pour envoyer des dates à Laravel _ php api de l’interface AngularJS?

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

puisque carbon peut l’imprimer, il peut aussi analyser ce format

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

en javascript avec moment.js momentjs.com

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

1) créer une date carbone dans le contrôleur Laravel

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

2) Vous devez commencer la Date dans 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) l'utiliser

<input type="date" class="form-control" ng-model="start_date">

4) N'essayez PAS d'initier la variable dans ng-init, cela ne fonctionnerait pas:  

0
Yevgeniy Afanasyev