Ayyappa Das
Ayyappa Das

Reputation:

Ruby on Rails - how to display a date in format i need? Converting from YYYY-MM-DD HH:MM:SS UTC to MM/DD/YYYY

I am a RoR newbie. I tried a lot of things, finally came to following:

<td>
 <%= Date.strptime(request.baseline_start_date, "%Y-%M-%D %H:%M:%S %Z").strftime("%M/%D/%Y")%>
</td>

But this is also giving me an error:

$_ value need to be String (nil given)

But I know that request.baseline_start_date gives me value (tried printing it separately). I don't know which one it is saying as nil given.

Any suggestions on how I can achieve format conversion?

Upvotes: 19

Views: 55902

Answers (7)

phil88530
phil88530

Reputation: 1509

Check the active support documentation and examples at: http://apidock.com/rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s

Examples

datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0)   # => Tue, 04 Dec 2007 00:00:00 +0000

datetime.to_formatted_s(:db)            # => "2007-12-04 00:00:00"
datetime.to_s(:db)                      # => "2007-12-04 00:00:00"
datetime.to_s(:number)                  # => "20071204000000"
datetime.to_formatted_s(:short)         # => "04 Dec 00:00"
datetime.to_formatted_s(:long)          # => "December 04, 2007 00:00"
datetime.to_formatted_s(:long_ordinal)  # => "December 4th, 2007 00:00"
datetime.to_formatted_s(:rfc822)        # => "Tue, 04 Dec 2007 00:00:00 +0000"

Or if you really want to customise it, define the helper like:

def custom_format(time)
  Time::DATE_FORMATS[:w3cdtf] = lambda { |time| time.strftime("%Y-%m-%dT%H:%M:%S# {time.formatted_offset}") }
end

Upvotes: 17

Andrew
Andrew

Reputation: 238667

In Rails you can use the to_time function on a string to convert it into a Date object:

'2012-11-14 14:27:46'.to_time.strftime('%B %e at %l:%M %p')

#=> "November 14 at 2:27 PM"

For a handy, interactive reference guide, refer to http://www.foragoodstrftime.com/

Upvotes: 33

Ryan
Ryan

Reputation: 499

Ive written a really nice gem that simplifies the whole process, and makes date formatting DRY.

Check it out at: http://github.com/platform45/easy_dates

Upvotes: 3

Bob Aman
Bob Aman

Reputation: 33239

Date.strptime(
  "2009-04-24 18:33:41 UTC",
  "%Y-%m-%d %H:%M:%S %Z"
).strftime("%m/%d/%Y")
# => "04/24/2009"

I think maybe you just got the capitalization on your format strings wrong.

Upvotes: 27

insane.dreamer
insane.dreamer

Reputation: 2072

You can use the String#to_time (or Date#to_time) function in ActiveSupport to convert the string into a Time (or Date) object. Then use strftime as you have already.

Upvotes: 3

Ayyappa Das
Ayyappa Das

Reputation:

Thanks a lot for the reply. My problem is, the output seems to be already string and i have to convert from date in string to another format.

When I look at the date stored in database (Oracle) it is mm/dd/yy, but when i get it displayed, it adds the timestamp and timezone.

I tried setting the default in Configuration\environment.rb as ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!( :default => '%d %b %Y' ) But that also doesn't seem to help.

At the end, if I just get the string to convert from Timezone format to mm/dd/yyyy, that is enough.

Upvotes: 0

Chad Ruppert
Chad Ruppert

Reputation: 3680

What I have done is add an initializer named conversions.rb in config/initializer After that Add a line like follows:

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:<name> => '<formatting>')

From there on you can render your datetime using your format with:

dateVar.to_s(:<name>)

There is a handy list here of the formatting tokens

Upvotes: 1

Related Questions