Ответ 1
if( strtotime($database_date) > strtotime('now') ) {
...
Im вытаскивает дату из базы данных, которая отформатирована как dd-mm-YYYY... Что я хочу сделать, это проверить текущую дату, если текущая дата предшествует дате, поступающей из базы данных, тогда она должна печатать дата базы данных, если ее после этого нужно распечатать "идти вперед".
Приветствия.
if( strtotime($database_date) > strtotime('now') ) {
...
Здесь список всех возможных проверок для & hellip;
"Прошла ли дата?"
$date = strtotime( $date );
$date > date( "U" )
$date > mktime( 0, 0, 0 )
$date > strtotime( 'now' )
$date > time()
$date > abs( intval( $_SERVER['REQUEST_TIME'] ) )
Я выполнил некоторые тесты производительности на 1000 000 итераций и вычислил среднее значение - Упорядоченный самый быстрый до самого медленного.
+---------------------+---------------+
| method | time |
+---------------------+---------------+
| time() | 0.0000006732 |
| $_SERVER | 0.0000009131 |
| date("U") | 0.0000028951 |
| mktime(0,0,0) | 0.000003906 |
| strtotime("now") | 0.0000045032 |
| new DateTime("now") | 0.0000053365 |
+---------------------+---------------+
ProTip:. Вы можете легко запомнить, что быстрее, просто глядя на длину функции. Чем дольше, тем медленнее функция.
Следующий цикл был запущен для каждой из вышеупомянутых возможностей. Я преобразовал значения в ненаучную нотацию для удобства чтения.
$loops = 1000000;
$start = microtime( true );
for ( $i = 0; $i < $loops; $i++ )
date( "U" );
printf(
'| date("U") | %s |'."\n",
rtrim( sprintf( '%.10F', ( microtime( true ) - $start ) / $loops ), '0' )
);
time()
по-прежнему кажется самым быстрым.
Если вы ищете общий способ сделать это через MySQL, вы можете просто использовать оператор SELECT
и добавить к нему предложение WHERE
.
Это захватит все поля для всех строк, где дата, хранящаяся в поле "дата", находится перед "сейчас".
SELECT * FROM table WHERE UNIX_TIMESTAMP(`date`) < UNIX_TIMESTAMP()
Лично я нашел этот метод более нежным для новичков в MySQL, так как он использует стандартную инструкцию SELECT с WHERE для получения результатов. Очевидно, что вы могли бы захватить только соответствующие поля, если хотите, перечислив их вместо использования подстановочного знака (*).
Я хотел установить конкретную дату, поэтому использовал это, чтобы делать вещи до 2 декабря 2013 года.
if(mktime(0,0,0,12,2,2013) > strtotime('now')) {
// do stuff
}
0,0,0
- полночь, 12
- месяц, 2
- день, а 2013
- год.
if (strtotime($date) > mktime(0,0,0))
должен выполнить задание.
Используйте strtotime, чтобы конвертировать любую дату в временную метку unix и сравнивать.
if(strtotime($row['database_date']) > strtotime('now')) echo $row['database_date'];
else echo date("d-m-Y");
Не нужно проверять часы, потому что, если они находятся в тот же день, он будет показывать ту же дату в любом случае...
Решение только для MySQL будет примерно таким:
SELECT IF (UNIX_TIMESTAMP(`field`) > UNIX_TIMESTAMP(), `field`,'GO AHEAD') as `yourdate`
FROM `table`
if(strtotime($db_date) > time()) {
echo $db_date;
} else {
echo 'go ahead';
}
Я использовал это, и он служил цели:
if($date < date("Y-m-d") ) {
echo "Date is in the past";}
BR