रूबी ऑन रेल्स में सरल दिनांक में दिनांक समय-सीमा बदलना


114

मेरे पास db में एक डेटाटाइम कॉलम है जिसे मैं उपयोगकर्ताओं को दिखाते समय एक साधारण तारीख में बदलना चाहता हूं।

मैं उसे कैसे कर सकता हूँ?

def_date दिखाया
  # to_date मौजूद नहीं है, लेकिन वह है जिसकी मुझे तलाश है
  स्व self.exif_date_time_original.to_date
समाप्त

क्या आप इसे प्रारूपित करना चाहते हैं?
पीर एलन

नहीं, मैं एक दिनांक ऑब्जेक्ट बनाना चाहूंगा
Collimarco

ऊह .. बेवकूफ सवाल! to_date DO EXISTS! क्षमा करें :(
Collimarco

जवाबों:


165

DateTime#to_date ActiveSupport के साथ मौजूद है:

$ irb
>> DateTime.new.to_date
NoMethodError: undefined method 'to_date' for #<DateTime: -1/2,0,2299161>
    from (irb):1

>> require 'active_support/core_ext'
=> true

>> DateTime.new.to_date
=> Mon, 01 Jan -4712

यह शर्म की बात है कि .to_date()मानक रूबी में मौजूद नहीं है इसलिए हमें वर्कअराउंड करना होगा। डेटाइम से डेट पर सही टाइमज़ोन गर्त स्ट्रिंग (!!!) के साथ परिवर्तित करना सुरुचिपूर्ण नहीं है। DateTime और Date के इंटर्नल को समझना आसान नहीं है। बस उग्र, उपेक्षा! :-)
नोटबंदी सूची

@Notinlist रूबी की संपूर्णता रूबी में लिखी गई है, इसलिए आप शायद to_date () विधि को खोजने के लिए रेल एपीआई पर नज़र डाल सकते हैं। वह आपको उस मॉड्यूल के बारे में बताएगा जो आप तब अपने कोड में डेटटाइम ऑब्जेक्ट्स के लिए शामिल कर सकते हैं
एरिक हू

9
.to_date को रूबी 1.9.2 में जोड़ा गया था।
जोशदान

7
@Michael तुम गलत हो। यहाँ रूबी 1.9.2 के मानक पुस्तकालय के लिए प्रलेखन to_date फ़ंक्शन का दस्तावेजीकरण है। रूबी-doc.org/stdlib-1.9.2/libdoc/date/rdoc/…
joshaidan

60

नमस्कार कोलिमार्को :) आप उर खुद की तारीख / समय प्रदर्शन बनाने के लिए रूबी स्ट्रैप्टाइम विधि का उपयोग कर सकते हैं ।

time.strftime (string) => string

  %a - The abbreviated weekday name (``Sun'')
  %A - The  full  weekday  name (``Sunday'')
  %b - The abbreviated month name (``Jan'')
  %B - The  full  month  name (``January'')
  %c - The preferred local date and time representation
  %d - Day of the month (01..31)
  %H - Hour of the day, 24-hour clock (00..23)
  %I - Hour of the day, 12-hour clock (01..12)
  %j - Day of the year (001..366)
  %m - Month of the year (01..12)
  %M - Minute of the hour (00..59)
  %p - Meridian indicator (``AM''  or  ``PM'')
  %S - Second of the minute (00..60)
  %U - Week  number  of the current year,
          starting with the first Sunday as the first
          day of the first week (00..53)
  %W - Week  number  of the current year,
          starting with the first Monday as the first
          day of the first week (00..53)
  %w - Day of the week (Sunday is 0, 0..6)
  %x - Preferred representation for the date alone, no time
  %X - Preferred representation for the time alone, no date
  %y - Year without a century (00..99)
  %Y - Year with century
  %Z - Time zone name
  %% - Literal ``%'' character

   t = Time.now
   t.strftime("Printed on %m/%d/%Y")   #=> "Printed on 04/09/2003"
   t.strftime("at %I:%M%p")            #=> "at 08:56AM"

20

रूबी 1.9.2 और इसके बाद के संस्करण में उन्होंने डेटाइम के लिए एक .to_date फ़ंक्शन जोड़ा:

http://ruby-doc.org/stdlib-1.9.2/libdoc/date/rdoc/DateTime.html#method-i-to_date

यह उदाहरण विधि 1.8.7 जैसे पुराने संस्करणों में मौजूद नहीं है।


यदि आप विस्तृत रूप से सक्रिय समर्थन को शामिल करते हैं तो ही।
माइकल डुरंट

3
नहीं, रूबी 1.9.2 और इसके बाद के संस्करण में आपको ActiveSupport शामिल करने की आवश्यकता नहीं है। जैसा कि आप मेरे उत्तर में देख सकते हैं, मैंने 1.9.2 के लिए कोर रूबी stdlib डॉक्स का लिंक शामिल किया।
जोशदान


0

मैंने हाल ही में इस प्रक्रिया को आसान बनाने के लिए और अपने विचार इत्यादि को स्पष्ट करने के लिए एक रत्न लिखा।

इसे यहाँ देखें: http://github.com/platform45/easy_dates


0

प्रवेश को पहले एक स्ट्रिंग में बदलने का प्रयास करें। जब तक डेटाबेस कॉलम प्रकार एक तारीख है यह एक तारीख के रूप में तैयार किया जाएगा।

स्व self.exif_date_time_original.to_s

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.