Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby datetime suitable for mysql comparison

Rails has been good with automatically inserting correctly formatted datetimes in MySql without the need for me to give it much thought.

However, for doing a validation, I need to check if a stored mysql datetime value (ie 2008-07-02 18:00:00) is greater than or less than "now". I can call DateTime.now or Time.now but how can I convert that into the format mysql likes?

Thanks

like image 815
user94154 Avatar asked Aug 10 '09 16:08

user94154


2 Answers

You can use to_s(:db) to convert into a database friendly format.

Time.now.to_s(:db)

However, be careful if you have a timezone specified in Rails because the time will be stored in UTC in the database. You'll need to specify that to do proper comparisons.

Time.now.utc.to_s(:db)

You can also use NOW() function in MySQL instead of generating the current time in Ruby.

like image 105
ryanb Avatar answered Nov 06 '22 15:11

ryanb


You don't need to. Let Rails do the work for you:

If your model is Widget this will find all the widgets that have been created in the last day:

Thing.find(:all, :condition => ["created_at > ?", Time.now - 1.day])

Rails will automatically convert the timestamp into the correct format.

like image 27
levinalex Avatar answered Nov 06 '22 17:11

levinalex