ActiveRecord में विभिन्न दिनांक / समय स्वरूपों के बीच अंतर रेल और जो कुछ भी आप डेटाबेस का उपयोग कर रहे हैं, उसके साथ सब कुछ करना है।
एक उदाहरण के रूप में MySQL का उपयोग करना (कोई अन्य कारण है क्योंकि यह सबसे लोकप्रिय है के लिए है), तुम हो DATE, DATETIME, TIMEऔर TIMESTAMPस्तंभ डेटा प्रकार; आप बस के रूप में CHAR, VARCHAR, FLOATऔर INTEGER।
तो, आप पूछते हैं, क्या अंतर है? खैर, उनमें से कुछ स्व-व्याख्यात्मक हैं। DATEकेवल एक तिथि संग्रहीत करता है, TIMEकेवल दिन का समय DATETIMEसंग्रहीत करता है , जबकि दोनों संग्रहीत करता है।
के बीच अंतर DATETIMEऔर TIMESTAMPथोड़ा अधिक सूक्ष्म है: DATETIMEके रूप में स्वरूपित है YYYY-MM-DD HH:MM:SS। मान्य पर्वतमाला वर्ष 1000 से वर्ष 9999 तक (और बीच में सब कुछ है। जब आप इसे डेटाबेस से लाते हैं तो समान TIMESTAMP दिखता है । यह वास्तव में यूनिक्स टाइमस्टैम्प के लिए सिर्फ एक मोर्चा है । इसकी वैध सीमा 1970 से 2038 तक है। अंतर यहाँ, विभिन्न निर्मित डेटाबेस इंजन के भीतर काम करता है, भंडारण स्थान है अलग से। क्योंकि DATETIMEभंडार वर्ष, माह दिन, घंटा, मिनट में हर अंकों और दूसरा, यह 8 बाइट्स की कुल उपयोग करता है। के रूप में TIMESTAMPकेवल संख्या संग्रहीत करता है 1970-01-01 के बाद से, यह 4 बाइट्स का उपयोग करता है।
आप MySQL में समय प्रारूपों के बीच मतभेदों के बारे में अधिक पढ़ सकते हैं यहाँ ।
अंत में, यह नीचे आता है कि आपको क्या करने के लिए अपनी तिथि / समय कॉलम की आवश्यकता है। क्या आपको 1970 से पहले या 2038 के बाद की तारीखों और समय को स्टोर करने की आवश्यकता है? का उपयोग करें DATETIME। क्या आपको डेटाबेस आकार के बारे में चिंता करने की ज़रूरत है और आप उस टाइमर के भीतर हैं? का उपयोग करें TIMESTAMP। क्या आपको केवल एक तारीख संग्रहीत करने की आवश्यकता है? का उपयोग करें DATE। क्या आपको केवल एक समय संग्रहीत करने की आवश्यकता है? का उपयोग करें TIME।
यह सब कहने के बाद, रेल वास्तव में आपके लिए इनमें से कुछ निर्णय लेती है । दोनों :timestampऔर :datetimeलागू हो जाएगी DATETIME, जबकि :dateऔर :timeमेल खाती है करने के लिए DATEऔर TIME, क्रमशः।
इसका मतलब है कि रेल के भीतर, आपको केवल यह तय करना होगा कि आपको तारीख, समय या दोनों को संग्रहीत करने की आवश्यकता है या नहीं।