Rails 2.1.1 setting datetime to nil at 00:00:00


#1

Hello,
There appears to be a strange bug in Rails 2.1.1 where if I set a
datetime
field to YYYY-MM-DD 00:00:00 (using TimeZone support) Rails returns nil,
instead of YYYY-MM-DD 00:00:00

Here is confirmed output:

c = Clip.find(53385)
=> #<Clip id: 53385, title: “test 2”, description: “test2”, keywords:
“test2”, publish_date: “2008-11-03 11:13:00”>

c.publish_date = “2008-11-03 19:00:00”
=> “2008-11-03 19:00:00”

c.save
=> true

c = Clip.find(53385)
=> #<Clip id: 53385, title: “test 2”, description: “test2”, keywords:
“test2”, publish_date: nil>

c.publish_date
=> nil

Any reason for this behavior ?

Adam


#2

=> #<Clip id: 53385, title: “test 2”, description: “test2”, keywords:
“test2”, publish_date: “2008-11-03 11:13:00”>

c.publish_date = “2008-11-03 19:00:00”
=> “2008-11-03 19:00:00”

c.save
=> true

c = Clip.find(53385)
=> #<Clip id: 53385, title: “test 2”, description: “test2”, keywords:
“test2”, publish_date: nil>

c.publish_date
=> nil

Your example isn’t setting it to 00:00:00, but 19:00:00 ?

Also, what does the database say? I’d want to see it confirmed there
as well. And lastly, are there any before/after filters on this
model? Any triggers in the database that might affect it?


#3

I used 19:00 b/c of Time zones (EST is GMT-5). I have a before_filter
that
sets the time zone to either the users time zone, or EST by default.
Database is storing it as 00:00:00 b/c we store as UTC
before_filter: Time.zone = current_user.timezone ?
current_user.timezone : $DEFAULT_TIME_ZONE where DEFAULT is EST

mysql> select id,publish_date from clips where id=53385 ;
±------±--------------------+
| id | publish_date |
±------±--------------------+
| 53385 | 2008-11-04 00:00:00 |
±------±--------------------+

Its a datetime field in DB
| publish_date | datetime

Adam


#4

confirmed to be an issue with validates_date_time
http://www.semergence.com/2006/12/20/validates_date_time-not-ready-for-prime-time/


#5

Whenever I need to store and manipulate a date independent of time, I
prefer using the SQL Date type and corresponding ActiveSupport Date
type. It’s a lot cleaner for parsing and validating.