json

2010-05-30 15 views
24

मैं एक फेसबुक आवेदन को लागू कर रहा हूँ और AJAX/JSON का उपयोग कर के साथ तारीखों रेल।json

हालांकि JSON लौटाई गई संरचनाओं में यह प्रारूप 2010-05-30T06:14:00Z है।

मैं नियंत्रक कार्रवाई में Game.all.to_json फोन कर रहा हूँ।

मैं उन्हें सामान्य दिनांक प्रारूप में कैसे परिवर्तित कर सकता हूं?

fbjs का उपयोग कर सर्वर पक्ष या क्लाइंट पक्ष से इसे करना आसान है? fbjs के साथ बहुत सारी बग हैं।

तो मैं (Active Records) का उपयोग करके समाधान का उपयोग करना पसंद करूंगा। JSON संरचनाओं को भेजने से पहले डेटा को परिवर्तित करने की तरह।

+0

यह काम करता है: http://stackoverflow.com/questions/5370061/format-date-time-in-find-operation-in-rails-3/7479550#7479550 – hipertracker

उत्तर

47

तरह से मैं json मैं लौट रहा था करने के लिए अपने स्वयं के कस्टम स्वरूप जोड़ा ActiveSupport TimeWithZone वर्ग के लिए एक बंदर पैच को जोड़ने के लिए किया गया था।

निम्नलिखित सामग्री के साथ config/initializers फ़ोल्डर में कोई फ़ाइल जोड़ें: समय क्षेत्र सभी प्रमुख ब्राउज़रों और IE7 + में काम के साथ

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

यह मेरे लिए बहुत अच्छा काम करता है, लेकिन अब मैं ' मैं दिनांक वस्तु के लिए एक समान चीज़ करने की कोशिश कर रहा हूं (date_select का उपयोग करके लौटाया गया)। मैंने ActiveSupport :: TimeWithZone को ActiveSupport :: दिनांक के साथ बदलने की कोशिश की है, लेकिन कोई खुशी नहीं है। किसी भी सहायता की सराहना की जाएगी। धन्यवाद। – Snips

+3

टाइमज़ोन के लिए% z जोड़ने में मददगार हो सकता है। – tbeseda

+0

@ गीकेगेको मैंने आपके उत्तर को ऊपर उठाया। मैंने इस दृष्टिकोण का उपयोग किया और यह मॉडल के साथ जुड़े डेटाटाइम फ़ील्ड के लिए बहुत अच्छा काम करता है, न कि एआरईएल क्वेरी में अन्य तालिका से डेटाटाइम फ़ील्ड के लिए। – GeorgeW

1

सर्वर पक्ष पर इसे करने के लिए निश्चित रूप से आसान है। आप इसे अपने इच्छित प्रारूप में रखने के लिए एक gsub regex कर सकते हैं, या एक time.strftime, फिर उस स्ट्रिंग के साथ अपने जेसन उत्पन्न कर सकते हैं।

7

:

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

साधारण।

2

आप क्लाइंट-साइड जावास्क्रिप्ट के साथ ऐसा करना चाहते हैं, तो आप कुछ इस तरह के साथ अलग-अलग तारीखों पार्स कर सकते हैं:

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; 
}; 

यदि आपकी निश्चित रूप से समय फ़ॉर्मेट करने के लिए की आवश्यकता होगी, कुछ अतिरिक्त कोड की आवश्यकता होगी। अब

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

आप के रूप में अपने मॉडल में विधि as_json ओवरराइड कर सकते हैं। जीवन आसान बना दिया।

0

रेल DateTime वस्तु पर .as_json विधि है: