I’ve always sucked at date/time calculations using PHP or MySQL. This changed a while ago when I broke the ice with a Facebook-style function for calculating time diferrence in a friendly way.
Today, I had to calculate past dates using 2 separate date and time columns. MySQL uses NOW()
to output a date format such as "2011-03-10 14:30:00"
. My date column was DATE()
– "2011-03-10"
and my time column was TIME()
– "14:30:00"
. So I had to combine them before making the comparison with NOW()
.
The MySQL function for this comparison is:
SELECT * FROM mytable WHERE DATE_ADD(mydate, INTERVAL mytime HOUR_SECOND) <= NOW()
This function will combine both columns into a TIMESTAMP
value, formatted by DATE_ADD
, ready to compare with NOW()
format.
My documentation included more examples such as: SELECT TO_SECONDS('2011-03-10 14:30:00');
and SELECT TO_SECONDS(NOW());
. Calculating the time diferrence in seconds is easy using these two MySQL functions, though time values such as 00:00:00
will fail.
This is how you format dates any way you want:
date('d/m/Y', strtotime($mydaterow)) date('H:i', strtotime($mytimerow))
This line will display the diferrence in minutes between two dates:
$toTime=strtotime('2010-10-10 13:48:00'); $fromTime=strtotime('2010-10-10 13:22:00'); echo round(abs($to_time - $from_time) / 60,2)." minute";
Imagine you can replace the date strings with your own date/time column(s).
And another MySQL line that will select rows within a range of time:
SELECT * FROM table WHERE DATE_ADD(date, INTERVAL time HOUR_SECOND) BETWEEN '2010-01-01 16:30:00' AND '2010-01-02 17:00:00';
Useful links:
MySQL – Combine date and time fields – FusionCoder