Необходимо обрабатывать строки в зависимости от даты, разделить список как бы на 2 части- анонсы и отчеты. Выбор пал на функцию UNIX_TIMESTAMP.
SELECT *, UNIX_TIMESTAMP(date_start) as uts_start FROM table ORDER BY date_start
В результате я могу сравнивать с текущим временем:
if($data['uts_start']<time()) { ... }
Все функции даты и времени:
Date and Time Functions
-----------------------
See *Note Date and time types:: for a description of the range of values
each type has and the valid formats in which date and time values may be
specified.
Here is an example that uses date functions. The query below selects
all records with a `date_col' value from within the last 30 days:
mysql> SELECT something FROM table
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
`DAYOFWEEK(date)'
Returns the weekday index
for `date' (`1' = Sunday, `2' = Monday, ... `7' = Saturday).
These index values correspond to the ODBC standard:
mysql> select DAYOFWEEK('1998-02-03');
-> 3
`WEEKDAY(date)'
Returns the weekday index for `date' (`0' = Monday, `1' = Tuesday,
... `6' = Sunday):
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2
`DAYOFMONTH(date)'
Returns the day of the month for `date', in the range `1' to `31':
mysql> select DAYOFMONTH('1998-02-03');
-> 3
`DAYOFYEAR(date)'
Returns the day of the year for `date', in the range `1' to `366':
mysql> select DAYOFYEAR('1998-02-03');
-> 34
`MONTH(date)'
Returns the month for `date', in the range `1' to `12':
mysql> select MONTH('1998-02-03');
-> 2
`DAYNAME(date)'
Returns the name of the weekday for `date':
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
`MONTHNAME(date)'
Returns the name of the month for `date':
mysql> select MONTHNAME("1998-02-05");
-> 'February'
`QUARTER(date)'
Returns the quarter of the year for `date', in the range `1' to
`4':
mysql> select QUARTER('98-04-01');
-> 2
`WEEK(date)'
`WEEK(date,first)'
With a single argument, returns the week for `date', in the range
`0' to `53' (yes, there may be the beginnings of a week 53), for
locations where Sunday is the first day of the week. The
two-argument form of `WEEK()' allows you to specify whether the
week starts on Sunday or Monday. The week starts on Sunday if the
second argument is `0', on Monday if the second argument is `1':
mysql> select WEEK('1998-02-20');
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
mysql> select WEEK('1998-12-31',1);
-> 53
`YEAR(date)'
Returns the year for `date', in the range `1000' to `9999':
mysql> select YEAR('98-02-03');
-> 1998
`YEARWEEK(date)'
`YEARWEEK(date,first)'
Returns year and week for a date. The second arguments works
exactly like the second argument to `WEEK()'. Note that the year
may be different from the year in the date argument for the first
and the last week of the year:
mysql> select YEARWEEK('1987-01-01');
-> 198653
`HOUR(time)'
Returns the hour for `time', in the range `0' to `23':
mysql> select HOUR('10:05:03');
-> 10
`MINUTE(time)'
Returns the minute for `time', in the range `0' to `59':
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
`SECOND(time)'
Returns the second for `time', in the range `0' to `59':
mysql> select SECOND('10:05:03');
-> 3
`PERIOD_ADD(P,N)'
Adds `N' months to period `P' (in the format `YYMM' or `YYYYMM').
Returns a value in the format `YYYYMM'.
Note that the period argument `P' is _not_ a date value:
mysql> select PERIOD_ADD(9801,2);
-> 199803
`PERIOD_DIFF(P1,P2)'
Returns the number of months between periods `P1' and `P2'. `P1'
and `P2' should be in the format `YYMM' or `YYYYMM'.
Note that the period arguments `P1' and `P2' are _not_ date values:
mysql> select PERIOD_DIFF(9802,199703);
-> 11
`DATE_ADD(date,INTERVAL expr type)'
`DATE_SUB(date,INTERVAL expr type)'
`ADDDATE(date,INTERVAL expr type)'
`SUBDATE(date,INTERVAL expr type)'
These functions perform date arithmetic. They are new for *MySQL*
Version 3.22. `ADDDATE()' and `SUBDATE()' are synonyms for
`DATE_ADD()' and `DATE_SUB()'.
In *MySQL* Version 3.23, you can use `+' and `-' instead of
`DATE_ADD()' and `DATE_SUB()' if the expression on the right side
is a date or datetime column. (See example)
`date' is a `DATETIME' or `DATE' value specifying the starting
date. `expr' is an expression specifying the interval value to be
added or substracted from the starting date. `expr' is a string;
it may start with a `-' for negative intervals. `type' is a
keyword indicating how the expression should be interpreted.
The `EXTRACT(type FROM date)' function returns the 'type' interval
from the date.
The following table shows how the `type' and `expr' arguments are
related:
`type' *value* *Expected* `expr' *format*
`SECOND' `SECONDS'
`MINUTE' `MINUTES'
`HOUR' `HOURS'
`DAY' `DAYS'
`MONTH' `MONTHS'
`YEAR' `YEARS'
`MINUTE_SECOND' `"MINUTES:SECONDS"'
`HOUR_MINUTE' `"HOURS:MINUTES"'
`DAY_HOUR' `"DAYS HOURS"'
`YEAR_MONTH' `"YEARS-MONTHS"'
`HOUR_SECOND' `"HOURS:MINUTES:SECONDS"'
`DAY_MINUTE' `"DAYS HOURS:MINUTES"'
`DAY_SECOND' `"DAYS HOURS:MINUTES:SECONDS"'
*MySQL* allows any punctuation delimiter in the `expr' format.
Those shown in the table are the suggested delimiters. If the
`date' argument is a `DATE' value and your calculations involve
only `YEAR', `MONTH', and `DAY' parts (that is, no time parts), the
result is a `DATE' value. Otherwise the result is a `DATETIME'
value:
mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
-> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
-> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
-> 20102
If you specify an interval value that is too short (does not
include all the interval parts that would be expected from the
`type' keyword), *MySQL* assumes you have left out the leftmost
parts of the interval value. For example, if you specify a `type'
of `DAY_SECOND', the value of `expr' is expected to have days,
hours, minutes, and seconds parts. If you specify a value like
`"1:10"', *MySQL* assumes that the days and hours parts are
missing and the value represents minutes and seconds. In other
words, `"1:10" DAY_SECOND' is interpreted in such a way that it is
equivalent to `"1:10" MINUTE_SECOND'. This is analogous to the
way that *MySQL* interprets `TIME' values as representing elapsed
time rather than as time of day.
Note that if you add or subtract a date value against something
that contains a time part, the date value will be automatically
converted to a datetime value:
mysql> select date_add("1999-01-01", interval 1 day);
-> 1999-01-02
mysql> select date_add("1999-01-01", interval 1 hour);
-> 1999-01-01 01:00:00
If you use really incorrect dates, the result is `NULL'. If you add
`MONTH', `YEAR_MONTH', or `YEAR' and the resulting date has a day
that is larger than the maximum day for the new month, the day is
adjusted to the maximum days in the new month:
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28
Note from the preceding example that the word `INTERVAL' and the
`type' keyword are not case sensitive.
`TO_DAYS(date)'
Given a date `date', returns a daynumber (the number of days since
year 0):
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
`TO_DAYS()' is not intended for use with values that precede the
advent of the Gregorian calendar (1582), because it doesn't take
into account the days that were lost when the calender was changed.
`FROM_DAYS(N)'
Given a daynumber `N', returns a `DATE' value:
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
`FROM_DAYS()' is not intended for use with values that precede the
advent of the Gregorian calendar (1582), because it doesn't take
into account the days that were lost when the calender was changed.
`DATE_FORMAT(date,format)'
Formats the `date' value according to the `format' string. The
following specifiers may be used in the `format' string:
`%M' Month name (`January'..`December')
`%W' Weekday name (`Sunday'..`Saturday')
`%D' Day of the month with English suffix
(`1st', `2nd', `3rd', etc.)
`%Y' Year, numeric, 4 digits
`%y' Year, numeric, 2 digits
`%X' Year for the week where Sunday is the
first day of the week, numeric, 4
digits, used with '%V'
`%x' Year for the week, where Monday is the
first day of the week, numeric, 4
digits, used with '%v'
`%a' Abbreviated weekday name (`Sun'..`Sat')
`%d' Day of the month, numeric (`00'..`31')
`%e' Day of the month, numeric (`0'..`31')
`%m' Month, numeric (`01'..`12')
`%c' Month, numeric (`1'..`12')
`%b' Abbreviated month name (`Jan'..`Dec')
`%j' Day of year (`001'..`366')
`%H' Hour (`00'..`23')
`%k' Hour (`0'..`23')
`%h' Hour (`01'..`12')
`%I' Hour (`01'..`12')
`%l' Hour (`1'..`12')
`%i' Minutes, numeric (`00'..`59')
`%r' Time, 12-hour (`hh:mm:ss [AP]M')
`%T' Time, 24-hour (`hh:mm:ss')
`%S' Seconds (`00'..`59')
`%s' Seconds (`00'..`59')
`%p' `AM' or `PM'
`%w' Day of the week
(`0'=Sunday..`6'=Saturday)
`%U' Week (`0'..`53'), where Sunday is the
first day of the week
`%u' Week (`0'..`53'), where Monday is the
first day of the week
`%V' Week (`1'..`53'), where Sunday is the
first day of the week. Used with '%X'
`%v' Week (`1'..`53'), where Monday is the
first day of the week. Used with '%x'
`%%' A literal `%'.
All other characters are just copied to the result without
interpretation:
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> select DATE_FORMAT('1999-01-01', '%X %V');
-> '1998 52'
As of *MySQL* Version 3.23, the `%' character is required before
format specifier characters. In earlier versions of *MySQL*, `%'
was optional.
`TIME_FORMAT(time,format)'
This is used like the `DATE_FORMAT()' function above, but the
`format' string may contain only those format specifiers that
handle hours, minutes, and seconds. Other specifiers produce a
`NULL' value or `0'.
`CURDATE()'
`CURRENT_DATE'
Returns today's date as a value in `'YYYY-MM-DD'' or `YYYYMMDD'
format, depending on whether the function is used in a string or
numeric context:
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
`CURTIME()'
`CURRENT_TIME'
Returns the current time as a value in `'HH:MM:SS'' or `HHMMSS'
format, depending on whether the function is used in a string or
numeric context:
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026
`NOW()'
`SYSDATE()'
`CURRENT_TIMESTAMP'
Returns the current date and time as a value in `'YYYY-MM-DD
HH:MM:SS'' or `YYYYMMDDHHMMSS' format, depending on whether the
function is used in a string or numeric context:
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026
`UNIX_TIMESTAMP()'
`UNIX_TIMESTAMP(date)'
If called with no argument, returns a Unix timestamp (seconds since
`'1970-01-01 00:00:00'' GMT). If `UNIX_TIMESTAMP()' is called with
a `date' argument, it returns the value of the argument as seconds
since `'1970-01-01 00:00:00'' GMT. `date' may be a `DATE' string,
a `DATETIME' string, a `TIMESTAMP', or a number in the format
`YYMMDD' or `YYYYMMDD' in local time:
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580
When `UNIX_TIMESTAMP' is used on a `TIMESTAMP' column, the function
will receive the value directly, with no implicit
"string-to-unix-timestamp" conversion. If you give
`UNIX_TIMESTAMP()' a wrong or out-of-range date, it will return 0.
`FROM_UNIXTIME(unix_timestamp)'
Returns a representation of the `unix_timestamp' argument as a
value in `'YYYY-MM-DD HH:MM:SS'' or `YYYYMMDDHHMMSS' format,
depending on whether the function is used in a string or numeric
context:
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300
`FROM_UNIXTIME(unix_timestamp,format)'
Returns a string representation of the Unix timestamp, formatted
according to the `format' string. `format' may contain the same
specifiers as those listed in the entry for the `DATE_FORMAT()'
function:
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
`SEC_TO_TIME(seconds)'
Returns the `seconds' argument, converted to hours, minutes, and
seconds, as a value in `'HH:MM:SS'' or `HHMMSS' format, depending
on whether the function is used in a string or numeric context:
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938
`TIME_TO_SEC(time)'
Returns the `time' argument, converted to seconds:
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
Последние 10: