2015-02-05 23 views
13

我完全停留在嘗試使php api與角度前端交換日期。如何處理php(Laravel api)和javascript(AngularJS)之間的日期時間

從PHP到JS我似乎有它排序。由於Laravel通過碳處理日期我只是說\Carbon\Carbon::setToStringFormat('c');到app.php這使得2012年新ISO 8601問世

PHP例子:

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

AngularJS日期過濾器也似乎很好地理解這種格式,甚至正確地讀取時區。

我還沒有找到工作是將JS日期對象發回PHP api。

JS例如:

2015-02-05T13:00:00.000Z

的Javascript日期格式與添加到字符串,並以默認配置碳毫秒結束抱怨尾隨數據。

此外,瀏覽器似乎會自動將我的日期轉換爲UTC時間。

手動使用new Carbon('jsDateString')似乎起初工作,但仔細檢查時區數據不考慮。

所以我的問題是什麼會是最好的和最自動的解決方案發回日期回到從AngularJS前端的Laravel php api?

+0

JavaScript沒有時區的本地支持,這使得日期處理有時真的很煩人。你可能想看看http://momentjs.com/這是一個非常好的時間操作庫。本文(https://nulogy.com/articles/dealing-with-timezones-in-javascript#.VNNrpjbN-fY)也描述了這些問題,以及他們如何解決問題。祝你好運! – 2015-02-05 13:14:19

+0

由於我使用LumX前端GUI框架,我認爲momentJs已經在那裏糾結了。如果我懷疑瀏覽器不會自動將我的時間轉換爲UTC,那麼時區甚至不會很重要。 感謝您的文章。我會通過它並報告回來。 – Priit 2015-02-05 13:25:33

+0

@JoelHinz感謝您的鏈接。它對問題有很好的解釋,如何解決它也是很好的推理。但是由於實際上我對時區沒有興趣,但只是因爲在瀏覽器中輸入的日期以UTC的方式結束而被迫與它們打交道,所以我會考慮更簡單的時刻(datetime).format()解決方案。 – Priit 2015-02-05 14:02:13

回答

16
$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 
+0

不能相信'correctTime = moment(utcTime).format();'是我所需要的將字符串恢復到正確的時區。謝謝@micha的答案。 那麼這是一個很好的一天。 – Priit 2015-02-05 14:05:16

+2

作爲一個警告,這仍然需要屬性制定者口若懸河,充分recogize,因爲它已經被設置爲處理傳入的日期不包括此作爲一個選項 '公共職能setStartsAtAttribute($值) { \t $方式格式this-> attributes ['starts_at'] = Carbon :: parse($ value); }' [link](https://github.com/laravel/framework/blob/5.0/src/Illuminate/Database/Eloquent/Model.php#L2822-L2859) – Priit 2015-02-05 14:21:02

0

1)使在Laravel控制器碳日期

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

2)你需要在角conctoller給init日期

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-初始化的變量,它不會工作: