Подтвердить что ты не робот

PHP Проверка текущей даты до или после установленной даты

Im вытаскивает дату из базы данных, которая отформатирована как dd-mm-YYYY... Что я хочу сделать, это проверить текущую дату, если текущая дата предшествует дате, поступающей из базы данных, тогда она должна печатать дата базы данных, если ее после этого нужно распечатать "идти вперед".

Приветствия.

4b9b3361

Ответ 1

if( strtotime($database_date) > strtotime('now') ) {
...

Ответ 2

Здесь список всех возможных проверок для & hellip;

"Прошла ли дата?"

Возможные способы получения значения

$date = strtotime( $date );

$date > date( "U" )
$date > mktime( 0, 0, 0 )
$date > strtotime( 'now' )
$date > time()
$date > abs( intval( $_SERVER['REQUEST_TIME'] ) )

Результат теста производительности (PHP 5.4.7)

Я выполнил некоторые тесты производительности на 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() по-прежнему кажется самым быстрым.

Ответ 3

Если вы ищете общий способ сделать это через MySQL, вы можете просто использовать оператор SELECT и добавить к нему предложение WHERE.

Это захватит все поля для всех строк, где дата, хранящаяся в поле "дата", находится перед "сейчас".

SELECT * FROM table WHERE UNIX_TIMESTAMP(`date`) < UNIX_TIMESTAMP()

Лично я нашел этот метод более нежным для новичков в MySQL, так как он использует стандартную инструкцию SELECT с WHERE для получения результатов. Очевидно, что вы могли бы захватить только соответствующие поля, если хотите, перечислив их вместо использования подстановочного знака (*).

Ответ 4

Я хотел установить конкретную дату, поэтому использовал это, чтобы делать вещи до 2 декабря 2013 года.

if(mktime(0,0,0,12,2,2013) > strtotime('now')) {
    // do stuff
}

0,0,0 - полночь, 12 - месяц, 2 - день, а 2013 - год.

Ответ 5

if (strtotime($date) > mktime(0,0,0)) должен выполнить задание.

Ответ 6

Используйте strtotime, чтобы конвертировать любую дату в временную метку unix и сравнивать.

Ответ 7

if(strtotime($row['database_date']) > strtotime('now')) echo $row['database_date'];
else echo date("d-m-Y");

Не нужно проверять часы, потому что, если они находятся в тот же день, он будет показывать ту же дату в любом случае...

Ответ 8

Решение только для MySQL будет примерно таким:

SELECT IF (UNIX_TIMESTAMP(`field`) > UNIX_TIMESTAMP(), `field`,'GO AHEAD') as `yourdate`
FROM `table`

Ответ 9

if(strtotime($db_date) > time()) {
  echo $db_date;
} else {
  echo 'go ahead';
}

Ответ 10

Я использовал это, и он служил цели:

if($date < date("Y-m-d") ) {
                echo "Date is in the past";}

BR