2011-10-17 11 views
9

कृपया मुझे क्षमा करें यदि यह कोई नोब मुद्दा है:रुबी और मोंगोआईड के साथ सही समय पर कैसे बचाएं?

मेरे पास एक ऐसा ऐप है जहां उपयोगकर्ता अपनी प्रोफ़ाइल में अपना टाइमज़ोन सेट कर सकते हैं।

जब कोई व्यक्ति आपको लाइनअप (एप्लिकेशन विशिष्ट शब्दावली), मैं निम्नलिखित है जोड़ता है:

Lineup.create({ 
    :date => time.gmtime, 
    :uid => user._id, 
    :pid => product._id 
}) 

यह (सिद्धांत में) के रूप में की तारीख को बचाने चाहिए:

time = ActiveSupport::TimeZone.new(user.timezone).parse(
    "Wednesday, 26 October, 2011 13:30:00" 
) 

# This outputs: 2011-10-26 13:30:00 +0200 - valid according to the user selected TZ 

मैं तो लाइनअप को बचाने जीएमटाइम, लेकिन मुझे रिकॉर्ड देखने पर निम्नलिखित मिलते हैं:

{ 
    "_id": ObjectId("4e9c6613e673454f93000002"), 
    "date": "Wed, 26 Oct 2011 13: 30: 00 +0200", 
    "uid": "4e9b81f6e673454c8a000001", 
    "pid": "4e9c6613e673454f93000001", 
    "created_at": "Mon, 17 Oct 2011 19: 29: 55 +0200" 
} 

जैसा कि आप देख सकते हैं कि दिनांक फ़ील्ड wr है ओएनजी - यह अभी भी उपयोगकर्ता टाइमज़ोन को बनाए रखता है, यह जीएमटी होना चाहिए, समय-समय पर विशिष्ट नहीं होना चाहिए।

अगर मैं उत्पादन time.gmtime, मैं सही समय (कि बचाया जाना चाहिए) मिलती है:

2011-10-26 11:30:00 UTC (correct) 

कोई भी विचार कैसे जीएमटी तारीख को बचाने के लिए इतना है कि यह वास्तव में जीएमटी तारीख की बचत होती है?

उत्तर

11

ऐसा लगता है कि आपको अपनी तिथि विशेषता फ़ील्ड प्रकार निर्दिष्ट करने की आवश्यकता है। यदि आप ज़ोनों को सही ढंग से संभालने के लिए मोंगोइड चाहते हैं तो मैं एक समय क्षेत्र का उपयोग करूंगा।

class Lineup 
    include Mongoid::Document 
    field :date, type: Time 
end 

तुम भी शायद config/mongoid.yml

defaults: &defaults 
    use_utc: false 
    use_activesupport_time_zone: true 

यह counterintuitive लग रहा में निम्नलिखित सेट करना चाहते हैं, लेकिन यह डिफ़ॉल्ट समय क्षेत्र के रूप में mongoid उपयोग यूटीसी बनाने के लिए वर्तमान तरीका है।

अंत में, mongoid-metastamp मणि पर एक नज़र डालें। यह आपको कई टाइमज़ोन में पूछताछ के लिए बहुत बेहतर समर्थन देगा, जबकि अभी भी एक देशी समय क्षेत्र की तरह काम कर रहा है।

+1

यह मोंटॉयड के वर्तमान संस्करणों में भी डेटटाइम के साथ काम करता है (मैं 2.4.7 पर हूं)। Https://github.com/mongoid/mongoid/issues/1135 देखें –

संबंधित मुद्दे