2015-02-05 17 views
13

Tôi hoàn toàn bị mắc kẹt cố gắng để làm cho ngày trao đổi api php với lối vào góc.Làm thế nào để xử lý datetime giữa php (Laravel api) và javascript (AngularJS)

Từ PHP sang JS Tôi dường như đã sắp xếp nó. Kể từ Laravel xử lý ngày qua Carbon Tôi chỉ cần thêm \Carbon\Carbon::setToStringFormat('c'); để app.php mà làm cho ngày đi ra trong ISO 8601.

PHP dụ:

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

Bộ lọc ngày AngularJS dường như cũng hiểu định dạng này và thậm chí đọc múi giờ chính xác.

Điều tôi chưa làm việc là đăng đối tượng ngày tháng trở lại api PHP.

JS Ví dụ:

2015-02-05T13: 00: 00.000Z

định dạng ngày Javascript kết thúc với mili giây bổ sung vào chuỗi và trong Carbon cấu hình mặc định phàn nàn về trailing dữ liệu.

Ngoài ra, các trình duyệt dường như tự động dịch ngày của tôi sang giờ UTC.

Sử dụng thủ công new Carbon('jsDateString') dường như hoạt động lúc đầu nhưng không xem xét dữ liệu múi giờ kiểm tra chặt chẽ hơn.

Vì vậy, câu hỏi của tôi là giải pháp tốt nhất và tự động nhất để gửi ngày trở lại api Laravel php từ giao diện AngularJS là gì?

+0

Javascript không có hỗ trợ gốc cho múi giờ, điều này khiến cho việc xử lý ngày thực sự gây phiền nhiễu đôi khi. Bạn có thể xem http://momentjs.com/, đây là thư viện thao tác thời gian thực sự tốt. Bài viết này (https://nulogy.com/articles/dealing-with-timezones-in-javascript#.VNNrpjbN-fY) cũng mô tả các vấn đề và cách chúng xử lý nó. Chúc may mắn! –

+0

Vì tôi đang sử dụng khung công tác front front gui, tôi nghĩ momentJs đã bị rối trong đó.Múi giờ thậm chí sẽ không quan trọng nếu những gì tôi nghi ngờ là trình duyệt sẽ không tự động chuyển đổi thời gian của tôi sang UTC. Cảm ơn bài viết. Tôi sẽ làm việc thông qua nó và báo cáo lại. – Priit

+0

@JoelHinz cảm ơn vì liên kết. Nó có giải thích rất tốt về vấn đề và lý do chính đáng để giải quyết nó. Nhưng vì tôi thực sự không quan tâm đến múi giờ nhưng bị buộc phải đối phó với họ chỉ vì một nơi nào đó dọc theo cách ngày được nhập vào trình duyệt kết thúc bằng UTC, tôi sẽ xem xét giải pháp đơn giản (datetime) .format(). – Priit

Trả lời

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

từ carbon có thể in nó nó cũng có thể phân tích định dạng này

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

trong javascript với moment.js momentjs.com

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

Không thể tin được 'correctTime = moment (utcTime) .format();' là tất cả những gì tôi cần để đưa chuỗi trở lại đúng múi giờ. Cảm ơn bạn @micha cho câu trả lời. Đây là một ngày tốt. – Priit

+2

Là một bối cảnh này vẫn cần setter thuộc tính cho hùng hồn để recogize đầy đủ các định dạng từ cách thức mà nó đã được thiết lập để xử lý ngày đến không bao gồm này như một tùy chọn 'công chức năng setStartsAtAttribute ($ value) { \t $ this-> attributes ['starts_at'] = Carbon :: phân tích cú pháp (giá trị $); } ' [liên kết] (https://github.com/laravel/framework/blob/5.0/src/Illuminate/Database/Eloquent/Model.php#L2822-L2859) – Priit

0

1) làm cho một ngày Carbon trong điều khiển Laravel

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

2) Bạn cần init ngày trong conctoller góc

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) sử dụng nó

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

4) ĐỪNG cố gắng init biến trong ng-init, nó sẽ không làm việc:

Các vấn đề liên quan