2015-07-12 28 views
7

Bir API yapıyorum ve tüm zaman damgalarını create_at, deleted_at, ... gibi gerçek zaman aralığı gibi karmaşık nesneler olarak değil, aynı zamanda saat dilimini de döndürmek istiyorum. Denetleyicimde zaten {Carbon/Carbon} kullanıyorum. Tarih alanımı modelde de tanımladım. Denetleyicimdeki tarih alanlarına eriştiğimde, aslında Karbon nesneleri alıyorum. Ama sonuçumu JSON olarak döndürdüğümde, sadece datetime dizesini görüyorum. Saat dilimi değil.Laravel 5 Saat dilimi ile geri dönme zamanı

Güncel JSON

{ 
    "id": 4, 
    "username": "purusScarlett93", 
    "firstname": null, 
    "lastname": null, 
    "language_id": 1, 
    "pic": null, 
    "email": null, 
    "authtoken": "f54e17b2ffc7203afe345d947f0bf8ceab954ac4f08cc19990fc41d53fe4eef8", 
    "authdate": "2015-05-27 12:31:13", 
    "activation_code": null, 
    "active": 0, 
    "devices": [], 
    "sports": [] 
} 

Dileğim :)

{ 
    "id": 4, 
    "username": "purusScarlett93", 
    "firstname": null, 
    "language_id": 1, 
    "pic": null, 
    "email": null, 
    "authtoken":"f54e17b2ffc7203afe41d53fe4eef8", 
    "authdate": [ 
    { 
     "datetime": "2015-05-27 12:31:13", 
     "timezone": "UTC+2" 
    } 
    ], 
    "activation_code": null, 
    "active": 0 
} 

Burada eksik fikrin var mı?

+0

ben size authdate erişimci değiştirerek bunu inanıyorum, ama dikkat edin Bu, tüm uygulamanızdaki tarihin erişimini değiştirir. Belirli bir API çağrısında daha spesifik bir değişiklik yapmak için, bunu denetleyicinizde veya karbon nesnesini alan ve yapacağınız 2 öğe dizisini oluşturan bir görüntü sınıfı ile halledebilirsiniz. – alariva

cevap

0

sen (yani JSON bir dizeye nesneyi dönüştürmeye çalıştığınızda tüm Carbon nesneler tetiklediği bir __toString() fonksiyonu var olmasıdır). Modelinizde kendi dizininizi oluşturup oluşturamayacağınızı görmeye çalışın. kullanıcı Alariva işaret ettiği gibi

public function getAuthdateAttribute(Carbon $authdate) { 
    return [ 
      'datetime' => $authdate->toDateTimeString(), 
      'timezone' => 'UTC' . $authdate->offsetHours 
      ]; 
} 

, bu yöntem authdate ulaşma varsayılan yolu geçersiz kılar; Orijinal Carbon nesnesine erişmek istiyorsanız, bunun için özel bir yöntem oluşturmanız gerekir.

Yoksa biraz zeki olmak ve böyle bir şey yapabileceğini:

public function getAuthdateAttribute(Carbon $authdate) { 
    return [ 
      'datetime' => $authdate, 
      'timezone' => 'UTC' . $authdate->offsetHours 
      ]; 
} 

Sonra orijinal nesneye erişim: $carbon = $this->authdate['datetime']

0

Sen modeli içinde böyle bir işlevi eklemeyi deneyebilirsiniz:

public function getAuthDateAttribute() { 
    return [ 
    "datetime" => "2015-05-27 12:31:13", 
    "timezone" => "UTC+2" 
];}