json

2010-05-30 15 views
24

Ben Facebook uygulamayı uygulanması ve AJAX/JSON kullanıyorum ile tarihleri ​​raylar. Ancak, JSON döndürülen yapılar 2010-05-30T06:14:00Z biçimindedir.json

Denetleyici eyleminde Game.all.to_json numaralı telefonu arıyorum.

Bunları normal bir tarih biçimine nasıl dönüştürebilirim?

fbjs'u kullanarak sunucu tarafında mı yoksa istemci tarafında mı yapmak daha kolay? fbjs ile bir sürü hata vardır.

Server side (Active Records) kullanarak bir çözüm kullanmayı tercih ediyorum. JSON yapılarını göndermeden önce verileri dönüştürmek gibi.

+0

Bu çalışır: http://stackoverflow.com/questions/5370061/format-date-time-in-find-operation-in-rails-3/7479550#7479550 – hipertracker

cevap

47

Kullandığım json'a kendi özel formatımı eklediğim yol, ActiveSupport TimeWithZone sınıfına bir maymun yama eklenmesiydi.

aşağıdaki içeriği ile config/initializers klasördeki bir dosya ekleyin:

class ActiveSupport::TimeWithZone 
    def as_json(options = {}) 
     strftime('%Y-%m-%d %H:%M:%S') 
    end 
end 
+0

Bu benim için harika çalışıyor, ama şimdi ben ' Bir Date nesnesine benzer bir şey yapmaya çalışıyorum (date_select kullanarak döndürüldü). ActiveSupport :: TimeWithZone'u ActiveSupport :: Date ile değiştirmeyi denedim, ancak sevinç yok. Herhangi bir yardım takdir edilecektir. Teşekkürler. – Snips

+3

Zaman dilimi için% z eklemek yararlı olabilir. – tbeseda

+0

@Geekygecko Cevabınızı destekledim. Bu yaklaşımı kullandım ve bir modelle ilişkilendirilmiş bir datetime alanı için harika çalışıyor, diğer bir tablodaki bir AREL sorgusundaki başka bir tablodan datetime alanı için değil. – GeorgeW

1

Sunucu tarafında bunu yapmak kesinlikle daha kolay. İstediğiniz formata yerleştirmek için bir gsub regex'i veya bir time.strftime yapabilir, daha sonra jsonunuzu bu dizeyle oluşturabilirsin.

7

zaman dilimi tüm büyük tarayıcılar ve ie7 + çalışan olarak:

class ActiveSupport::TimeWithZone 
    def as_json(options = {}) 
    strftime('%Y/%m/%d %H:%M:%S %z') 
    end 
end 
1
Time.parse <datetime> 

simples. Eğer istemci tarafında javascript ile bunu yapmak istiyorsanız

2

, böyle bir şey ile tek tek tarihleri ​​ayrıştırabileceğiniz: senin tabii zaman biçimlendirmek gerek olmadığını

prettyDate = function(dateString) { 
    var day, formatted, jsDate, month; 

    jsDate = new Date(dateString); 
    day = jsDate.getMonth() + 1 < 10 ? "0" + (jsDate.getMonth() + 1) : "" + (jsDate.getMonth() + 1); 
    month = jsDate.getDate() < 10 ? "0" + (jsDate.getDate()) : "" + (jsDate.getDate()); 

    formatted = "" + day + "/" + month + "/" + (jsDate.getFullYear()); 
    return formatted; 
}; 

Bazı ek kod gerekir. Şimdi

class Game 
    def as_json(options = {}) 
    super.merge(time: time.strftime('%d.%m.%Y %H:%M:%S')) 
    end 
end 
2

Sen olarak modelinde yöntem as_json geçersiz kılabilir. Hayat daha kolaylaştı.

0

Raylar DateTime nesne üzerinde .as_json yöntemi vardır: