Закинули мне такой кусочек кода как переписать на strtotime -30 days , o-m-d этот момент для меня темный лес, открыл нету практики ничего не понял что в доке написано Код (Text): $test[ 'create_time' ] < date( 'o-m-d', time() - ( 86400 * 31 ) ) --- Добавлено --- В чём разница между o-m-d и Y-m-d что-то почитал , стандарты , не понять мне пока ещё этого
Поклацал не много разобрался ))) Что лучше использовать time() или strtotime? В чём разница ? - 30 дней и - 86400 * 30 PHP: $v = date( 'Y-m-d H:i:s', strtotime('-'.TTL.' days') ) ; if ( $test[ 'created_at' ] < $v )
Не совсем. Всё-таки, сначала вам стоит разобраться что у вас в $test['created_at'] и в $v. А потом таки почитать вот это: https://www.php.net/manual/ru/language.operators.comparison.php Возможно, оно натолкнет вас на верное направление в рассуждениях Ну, или заставит конкретней описывать свою проблему, а не заведомо ошибочную попытку её решить
Я так и не понял к чему ты вёл, сравниваю даты , чтобы если время истекло уничтожить сессию PHP: 2023-09-01 00:00:00 < date('Y-m-d H:i:s', strtotime('-'.MAX_LIFETIME.' days')
Код (Text): echo (int)'2023-09-01 00:00:00'; echo (int)date('Y-m-d H:i:s',strtotime('-'.MAX_LIFETIME.' days');
Зачем int() добавлять ? Видел но не читал за эту фишку даже , DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, типа здесь может быть что-то другое кроме 0000-00-00 00:00:00 ?
https://www.php.net/manual/ru/language.operators.comparison.php Именно так выглядят операнды при их сравнении. Другими словами, вы сравниваете 2023 и 2023. Теперь о том, как правильно подойти к решению вашей проблемы, задав себе, или поисковику, или же сообществу ряд вопросов. 1. Как корректно сравнить две даты и почему оператор сравнения < работает не так, как ожидается 2. Как преобразовать дату в корректный для сравнения вид. И обратно, если надо
Кстати, когда разберетесь с вышеописанным, задайтесь еще одним вопросом - а как так получилось, что дата для сравнения извлекается из базы в неподходящем для сравнения виде
Вроде как работает без проблем, при ассоциативном массиве будет такой же результат PHP: define('TTL', 30); $test = [ 'created_at' => '2023-09-01 00:00:00' ]; if($test['created_at'] < date('Y-m-d H:i:s', strtotime('-'.TTL.' days'))) echo 'yes'; else echo 'no';
@Неугомонный, разницу в твоём контексте сравнения между PHP: $test['created_at'] < date( , PHP: $createdAt < date( и PHP: "yyyy-mm-dd hh:mm:ss" < date( ощущаешь? её же, %$#, нет!
Уточнение. При равных типах операндов, похоже, преобразования в int не происходит. Сравниваться будут коды символов То есть, если по каким-то причинам формат даты изменится, код перестанет работать, как от него ожидается. Так, что, если вас все устраивает, то пусть будет. Но полагаться на это неразумно
Я не крутой парень не из компании учился в Гугле, расскажите же чем так плохо делать так как делаю я ? Вроде же работает --- Добавлено --- У меня был такой учитель а если а вдруг потом всплыло что он по жизни так и вышел вдруг случайной что-то у кого-то поменялось и получился мой подсказчик по пхп который первое время помогал пото я думаю без вдруг случайно будет мне лучше ))) --- Добавлено --- И как правильно сравнивать время которое я достану с бд через ассоциацииативный массив?
Извлекать время в формате UNIX Код (Text): SELECT UNIX_TIMESTAMP( `created_at` ) AS `utime` FROM `tablename` И сравнивать с датой в аналогичном формате, получая его например так Код (Text): $v = time() - 86400 * 31;
UNIX_TIMESTAMP << кстати видел , но не стал читать думаю и так уже с нуля начитался пропустил и забыл , спасибо почитаю попробую разобраться что происходит для себя . --- Добавлено --- Тогда у меня вопрос другой возникает , я немного свой говнокод подправил перенес массивы и теперь select * , как тут быть ? --- Добавлено --- Не выводить же мне отдельно все колонки через запятую select `id`, `user_id`, `ip_address` AS `ip`, UNIX_TIMESTAMP( `created_at` ) AS time и т.д PHP: if(isset($_COOKIE[COOKIE_PREFIX.'_session_id'])) { $session = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT * FROM `".DB_PREFIX."_sessions` WHERE `id` = '".esc($_COOKIE[COOKIE_PREFIX.'_session_id'])."'"));
Я не знал что так можно , спасибо, как говорится с опытом всё проходит , учитывая что всё я учил в поисковике гугл ))) --- Добавлено --- Ip адреса также стоит хранить aton или что-то такого видел или можно varchar (15 )?
На первых порах можно хранить и то, и это. Преобразованное - для работы, как есть - для отображения в PMA Когда таблица разрастется, придется выбрать что-то одно. Опытным путем
Я думаю не много уже буду лучше понимать что происходит к тому моменту)) Спасибо за подсказки, поскольку возможности затестить нету пока что финальный варик PHP: if($test['utime'] < (time() - 86400 * 31)) //Удалили или что мне нужно Верно я понял ?
А если так тогда мне нужно настраивать часовой пояс под себя ? Для strtotime PHP: if($test['utime']< strtotime('-'.MAX_LIFETIME.' days') --- Добавлено --- В общем спасибо буду разбираться читать что происходит такие запросы не использовал ещё )) ели с джоинами разобрался а оказалось мне не нужен пока что, а как придется забуду
Ладно , пытаюсь прыгнуть выше головы, спасибо пожалуй time() использовать буду бо пока что как я говорил опыта не много 3 месяца гугл обучения подсказок, попыток ))
Рекомендую часовые пояса для PHP и БД хранить в своём конфиге, при каждом старте скрипта их устанавливать, поможет избежать многих неожиданностей.