Rails Date Format - ruby-on-rails

I am developing a rails 3.2 app.
I have the following configuration in initializers/time_format.rb file.
Date::DATE_FORMATS.merge!(default: "%m/%d/%Y")
Date::DATE_FORMATS.merge!(db: "%m/%d/%Y")
Time::DATE_FORMATS.merge!(default: "%m/%d/%Y %H:%M:%S")
Time::DATE_FORMATS.merge!(db: "%m/%d/%Y %H:%M:%S")
I want all date format %m/%d/%Y.
It works fine except that input element shows "yyyy-mm-dd" format?
What am I missing?
Thanks.
Sam

Are you talking about the date_select form helper?
Maybe try modifying your form like this?
date_select("article", "written_on", :order => [:month, :day, :year])
Check the API for more details.

Related

Rails - datetime_select - change order of time and date

I use datetime_select in my application and i want to use such order of time and date:
HH MM - DD MM YYYY
But i can't get how to do that. :order option allow only array that containing :day, :month and :year.
Is there any solution to solve that?
:order => [:hour, :minute, :day, :month, :year].
That should do it.

Rails 3 default datetime format without UTC

I'm creating a new Rails 3 app, and in it I use DateTime for a couple of fields, however every datetime field standard has UTC behind it (in a view), like:
2010-10-10 16:19:00 UTC
How do I get rid of the UTC part?
UPDATE: here's what I have so far:
<%= trip.truckleft.strftime("%Y-%m-%d %H:%M") %>
So all I have to do now is put that in a helper, but isn't there a better more universal way?
I looked at some other posts, that suggested creating a time_formats.rb in initializers, however I didn't have any success doing that.
Thanks for your help, much appreciated!
Another -- perhaps now preferred -- way is to use Rails' internationalization and localization support. There's a lot to learn in that guide, so the tl;dr version is this:
<%= l trip.truckleft, :format => :long %>
There are a few predefined date and time formats like :long available to you already for English, and you can add your own in config/locales/en.yml by following the YAML structure in those examples. If you're not getting heavily into the whole i18n/l10n thing just yet and looking at the l method all the time is confusing, you can also use:
<%= trip.truckleft.to_formatted_s(:long) %>
Here is what finally worked for me:
I created a new file in:
config/initializers/
named: time_formats.rb
and added this to that file:
Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"
Then I saved, restarted the server and it started to work.
I'm using i18n to format my dates and have this in en.yml:
date:
formats:
default: "%m/%d/%Y"
I wanted to reuse that format for how the models show their dates, so my config/initializers/time_formats.rb contains this:
Date::DATE_FORMATS[:default] = lambda { |date| I18n.l(date) }
To be exact, you should put these in your initializers:
Date::DATE_FORMATS[:default] = "%m-%d-%Y"
Time::DATE_FORMATS[:default] = "%m-%d-%Y %H:%M"
When having datetime, the second one will work (for example: created_at for in models).
You can put the following line at the end of your config/environment.rb file:
Date::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"
for rails 3
add to config/environment.rb
my_datetime_formats = { :default => '%F %T' } #or any other you like
my_date_formats = { :default => '%F' } #or any other you like
Time::DATE_FORMATS.merge!(my_datetime_formats)
Date::DATE_FORMATS.merge!(my_date_formats)
(the difference from other answers - is merge! method)

Ruby on Rails: formatting date inside a field

My field:
<%= f.text_field :expires_at, :label => false, :class => "input-field" %>
but I want the date to be kinda like this when the page loads: June, 1st, 1752 9:54:00 pm
How would I do that?
Why are you using a text_field for a datetime? Consider using time_select instead.
If you really want to format a date that way though, just use strftime.
So, in your case, add
:value => #object.expires_at.strftime('%B %d, %Y %H:%M:%S %p')
You can format dates and times using the strftime method.
See Ruby's strftime and then use :value => #date_value
If you want this date format to be used throughout your application, you can set the default format in your environment.rb file:
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(:default => "%a %m/%d/%Y %I:%M%p")
If you do this, every time you display a date, it will be formatted according to the date format string you've provided.

Rails date format in form field

I'd like my dates in the mm/dd/year format in text fields. However, they currently displays as 2010-03-26.
Is there a global setting I can set to change this?
I tried the following, which seems to update the .to_s method, but form fields stay the same.
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(:default => '%m/%d/%Y')
Thanks
You have to register the default format in an initializer.
Add this line to the config/initializers/date_time_formats.rb.
Date::DATE_FORMATS[:default] = '%m/%d/%Y'
# if you want to change the format of Time display then add the line below
Time::DATE_FORMATS[:default]= '%m/%d/%Y %H:%M:%S'
# if you want to change the DB date format.
Time::DATE_FORMATS[:db]= '%m/%d/%Y %H:%M:%S'
Now in the script\console lets test the format.
>> Date.today.to_s
=> "03/14/2010"
>> Time.now.to_s
=> "03/14/2010 13:20:55"
I don't know if there is a global setting for that anywhere, I just do it in the ERB.
<%= text_field_tag("air_date_date", air_date.blank? ? "" : air_date.strftime("%m/%d/%Y"), :class => "date-input text") %>
Alternatively, you can factor this out into a helper function to make it DRY.
I know this is an awfully old question, but you could use date_field instead of text_field. Perhaps that wasn't an option when you asked this question originally.
It displays the date in mm/dd/yyyy, which is your intent.
<%= date_field :column_name %>
The date_select form helper provides a "bare bones" date selector.

Formatting timestamps

How do you format Rails timestamps in a more human-readable format? If I simply print out created_at or updated_at in my view like this:
<% #created = scenario.created_at %>
Then I will get:
2009-03-27 23:53:38 UTC
The strftime (from Ruby's Time) and to_formatted_s (from Rails' ActiveSupport) functions should be able to handle all of your time-formatting needs.
Take a look at the I18n functionality. It allows you to do the following in your views:
<%= localize(scenario.created_at, :format => :long) %>
where the formats are defined in your locales.
More info
Also
<%= l scenario.created_at, :format => :sample) %>
And in locales/en.yml(depending of language)
en:
time:
formats:
sample: '%d.%m.%Y'
To learn more, see - http://guides.rubyonrails.org/i18n.html
Time.now().to_i works great. For reverse conversion use Time.at(argument)
You can use strftime to format the timestamp in many ways. I prefer some_data[:created_at].strftime('%F %T'). %F shows "2017-02-08" (Calendar date extended), and %T shows "08:37:48" (Local time extended).
For timezone issues, add this lines to your config/application.rb file
config.time_zone = 'your_timezone_string'
config.active_record.default_timezone = :local
See below for 1.Make a timestamp and 2.Format a timestamp
1.Make a timestamp
This line code in Ruby Time.now.getutc returns a UTC time stamp e.g. 2022-07-05 15:20:40.976321 UTC.
2.Format a timestamp
You can then format it with strftime. The 2 lines of code:
timestamp_UTC=Time.now.getutc
timestamp_UTC_formated=timestamp_UTC.strftime("%Y%m%d_%Hh%Mm%Ss")
return a timestamp formated, e.g. "20220705_15h23m24s".
See strftime documentation for the formatting syntax.
you have to modify the timestamp file, in my case this file is located in /usr/local/rvm/gems/ruby-2.0.0-p195/gems/activerecord-4.2.0/lib/active_record/timestamp.rb. You must search for this line:
self.class.default_timezone == :utc ? Time.now.utc : Time.now
and change it to this:
self.class.default_timezone == :utc ? Time.now.utc : Time.now.strftime('%Y-%m-%d %H-%M-%S')
The trick is to modify the format with the strftime method, you can change the format if you want.
Now rails will use your format to update the "updated_at" column.

Resources