datetime question.

Hi there. I'm just learning so bear with me. I have a column in my database for date_created and it shows in the view as Wed Nov 28 18:05:00 -0600 2007. I don't really want it to display like that so is there a way to change how that date is formated in the view but not changed in the database? The code I have looks like this:

<span id="created_on"><%= e.date_created %></span>

Also in the _form.rhtml for editing entries, scaffolding builds this:

<%= datetime_select 'entry', 'date_created' %>

Is there anyway to have that not show but still put the time created in the database? If I remove the

Sorry, totally nuby question here I'm sure. I may be hounding you guys again in the near future. Better to ask questions early and often. Thanks so much in advance to anyone who can shed a little light on this.

Sure, use strftime.

Fred

This should be more useful to you: #31 Formatting Time - RailsCasts

Thanks so much. I should have checked there first. I haven't gotten around to watching any of those yet which, I guess, I really should. Those and my bloody PeepCode downloads. Anyway, thanks again for pointing me in the right direction. I'd heard there was a supportive community for Rails and there's the proof!

wsakundi wrote:

Hi there. I'm just learning so bear with me. I have a column in my database for date_created and it shows in the view as Wed Nov 28 18:05:00 -0600 2007. I don't really want it to display like that so is there a way to change how that date is formated in the view but not changed in the database? The code I have looks like this:

<span id="created_on"><%= e.date_created %></span>    Basically, you can use strftime to change it to look like anything that suits you. Look it up in the Ruby API. it will be something like e.date_created.strftime("%d-%m-%Y") will give you something like 02-12-2007.

Also in the _form.rhtml for editing entries, scaffolding builds this:

<%= datetime_select 'entry', 'date_created' %>

Is there anyway to have that not show but still put the time created in the database? If I remove the   

Scaffold automatically creates the field for created_on in the form. You can delete it from the form. The user doesn't need to enter a date for it. Rails will automatically insert the created_on datetime when the record is saved.

Sorry, totally nuby question here I'm sure. I may be hounding you guys again in the near future. Better to ask questions early and often. Thanks so much in advance to anyone who can shed a little light on this

Welcome aboard!

Cheers, Mohit. 12/2/2007 | 1:25 AM.

Thanks. I've tried removing datetime_select but it won't put the time into the table and then breaks because it's returning a value of nil when I want that date to display in my list of entries. I thought that I could just put Time.now in there but, nope. That shows the time but doesn't put it into the database. I guess I have more reading to do. Is that something I would fix in the Controller? or should I be correcting that (somehow) in my view?

Maybe I'm missing something in this question, but wouldn't:

<%= e.date_created.to_formatted_s(:short) %>

do the trick?

Put this in your config/environment.rb file at the bottom:

ActiveSupport::CoreExtensions::date::Conversions::DATE_FORMATS.update(:default => '%m-%d-%Y') ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:default => '%m-%d-%Y')

This will format ALL displayed time and date formats on your site to appear as 12-24-2007 format, so you only have to do

e.date_created

If your column name is date_created, rails won't automatically populate it with the time. If you want rails to create it for you, you should rename it to created_at, or created_on. If you don't want to rename it you can modify your create action in the controller with something like this: def create   @entry = Entry.new(params[:entry])   @entry.date_created = Time.now   if @entry.save....bla bla bla     ...bla bla end

There may be a better way, like putting it in your model. Maybe someone else can chime in.

ActiveRecord should be using the :db format rather than the :default when making date strings to be consumed by the database.

-Rob

Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com