web-dev-qa-db-fra.com

Transformez DateTime en Date simple en Ruby sur Rails

J'ai une colonne datetime dans la base de données que je souhaite transformer en une date simple lorsque je la montre aux utilisateurs.

Comment puis je faire ça?

 def shown_date 
 # to_date n'existe pas, mais est ce que je recherche 
 self.date || self.exif_date_time_original.to_date 
 end 
108
collimarco

DateTime#to_date existe avec 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
153
Ryan McGeary

Bonjour collimarco :) vous pouvez utiliser la méthode Ruby strftime ==] pour créer votre propre affichage date/heure.

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"
58
gkrdvl

Dans Ruby 1.9.2 et supérieur, ils ont ajouté une fonction .to_date à DateTime:

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

Cette méthode d'instance ne semble pas être présente dans les versions antérieures telles que 1.8.7.

20
joshaidan

Pour les anciens Ruby (1.8.x):

myDate = Date.parse(myDateTime.to_s)
2
Lassi

Essayez de convertir l’entrée en une chaîne en premier. Tant que le type de colonne de la base de données est une date, il sera formaté en tant que date.

self.date || self.exif_date_time_original.to_s

0
CrazyCoderMonkey

J'ai récemment écrit un petit bijou pour simplifier ce processus et pour préciser vos points de vue, etc.

Vérifiez-le à: http://github.com/platform45/easy_dates

0
Ryan