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

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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.

Method 2

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.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x