Im потянув дату из базы данных, которая отформатирована как dd-mm-YYYY … Что я хочу сделать, это проверить текущую дату, если текущая дата предшествует дате, поступающей из базы данных, тогда ей нужно распечатать дату базы данных , если после этого ему нужно напечатать «идти вперед».
Приветствия.
if( strtotime($database_date) > strtotime('now') ) { ...
Вот список всех возможных проверок для …
«Прошла ли дата?»
$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 для преобразования любой даты в timestamp unix и сравнения.
if(strtotime($row['database_date']) > strtotime('now')) echo $row['database_date']; else echo date("dmY");
Не нужно проверять часы, потому что, если они будут в тот же день, он будет показывать ту же дату в любом случае …
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("Ymd") ) { echo "Date is in the past";}
BR