За последние 24 часа нас посетили 70162 программиста и 3590 роботов. Сейчас ищут 2172 программиста ...

Время в strtotime

Тема в разделе "Сделайте за меня", создана пользователем Неугомонный, 16 сен 2023.

  1. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Закинули мне такой кусочек кода как переписать на strtotime -30 days , o-m-d этот момент для меня темный лес, открыл нету практики ничего не понял что в доке написано
    Код (Text):
    1. $test[ 'create_time' ] < date( 'o-m-d', time() - ( 86400 * 31 ) )
    --- Добавлено ---
    В чём разница между o-m-d и Y-m-d что-то почитал , стандарты , не понять мне пока ещё этого
     
  2. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Поклацал не много разобрался )))
    Что лучше использовать time() или strtotime? В чём разница ? - 30 дней и - 86400 * 30
    PHP:
    1. $v = date( 'Y-m-d H:i:s', strtotime('-'.TTL.' days') ) ;
    2. if ( $test[ 'created_at' ] < $v )
     
  3. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Не совсем.
    Всё-таки, сначала вам стоит разобраться что у вас в $test['created_at'] и в $v.
    А потом таки почитать вот это:
    https://www.php.net/manual/ru/language.operators.comparison.php
    Возможно, оно натолкнет вас на верное направление в рассуждениях
    Ну, или заставит конкретней описывать свою проблему, а не заведомо ошибочную попытку её решить
     
  4. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    'created_at' => '2023-09-01 00:00:00'
    --- Добавлено ---
    хочешь сказать заменить < на <= ?
     
  5. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я так и не понял к чему ты вёл, сравниваю даты
    , чтобы если время истекло уничтожить сессию
    PHP:
    1. 2023-09-01 00:00:00 < date('Y-m-d H:i:s', strtotime('-'.MAX_LIFETIME.' days')
     
  6. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Код (Text):
    1. echo (int)'2023-09-01 00:00:00';
    2. echo (int)date('Y-m-d H:i:s',strtotime('-'.MAX_LIFETIME.' days');
     
  7. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Зачем int() добавлять ? Видел но не читал за эту фишку даже , DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, типа здесь может быть что-то другое кроме 0000-00-00 00:00:00 ?
     
  8. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    https://www.php.net/manual/ru/language.operators.comparison.php
    Именно так выглядят операнды при их сравнении.
    Другими словами, вы сравниваете 2023 и 2023.
    Теперь о том, как правильно подойти к решению вашей проблемы, задав себе, или поисковику, или же сообществу ряд вопросов.
    1. Как корректно сравнить две даты и почему оператор сравнения < работает не так, как ожидается
    2. Как преобразовать дату в корректный для сравнения вид. И обратно, если надо
     
  9. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Кстати, когда разберетесь с вышеописанным, задайтесь еще одним вопросом - а как так получилось, что дата для сравнения извлекается из базы в неподходящем для сравнения виде
     
  10. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Вроде как работает без проблем, при ассоциативном массиве будет такой же результат
    PHP:
    1. define('TTL', 30);
    2. $test =
    3. [
    4.     'created_at' => '2023-09-01 00:00:00'
    5. ];
    6. if($test['created_at'] < date('Y-m-d H:i:s', strtotime('-'.TTL.' days')))
    7.     echo 'yes';
    8. else
    9.     echo 'no';
     
  11. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    945
    Симпатии:
    146
    @Неугомонный, разницу в твоём контексте сравнения между
    PHP:
    1. $test['created_at'] < date(
    ,
    PHP:
    1. $createdAt < date(
    и
    PHP:
    1. "yyyy-mm-dd hh:mm:ss" < date(
    ощущаешь? её же, %$#, нет!
     
  12. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Уточнение.
    При равных типах операндов, похоже, преобразования в int не происходит.
    Сравниваться будут коды символов
    То есть, если по каким-то причинам формат даты изменится, код перестанет работать, как от него ожидается.
    Так, что, если вас все устраивает, то пусть будет. Но полагаться на это неразумно
     
  13. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я не крутой парень не из компании учился в Гугле, расскажите же чем так плохо делать так как делаю я ? Вроде же работает
    --- Добавлено ---
    У меня был такой учитель а если а вдруг потом всплыло что он по жизни так и вышел вдруг случайной что-то у кого-то поменялось и получился мой подсказчик по пхп который первое время помогал пото я думаю без вдруг случайно будет мне лучше )))
    --- Добавлено ---
    И как правильно сравнивать время которое я достану с бд через ассоциацииативный массив?
     
  14. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Извлекать время в формате UNIX
    Код (Text):
    1. SELECT UNIX_TIMESTAMP( `created_at` ) AS `utime`
    2. FROM `tablename`
    И сравнивать с датой в аналогичном формате, получая его например так
    Код (Text):
    1.  
    2. $v = time() - 86400 * 31;
     
  15. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    UNIX_TIMESTAMP << кстати видел , но не стал читать думаю и так уже с нуля начитался пропустил и забыл , спасибо почитаю попробую разобраться что происходит для себя .
    --- Добавлено ---
    Тогда у меня вопрос другой возникает , я немного свой говнокод подправил перенес массивы и теперь select * , как тут быть ?
    --- Добавлено ---
    Не выводить же мне отдельно все колонки через запятую select `id`, `user_id`, `ip_address` AS `ip`, UNIX_TIMESTAMP( `created_at` ) AS time и т.д

    PHP:
    1. if(isset($_COOKIE[COOKIE_PREFIX.'_session_id']))
    2. {
    3.     $session = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT * FROM `".DB_PREFIX."_sessions` WHERE `id` = '".esc($_COOKIE[COOKIE_PREFIX.'_session_id'])."'"));
     
  16. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Код (Text):
    1. SELECT `tablename`.*, UNIX_TIMESTAMP( `created_at` ) AS `utime`
    2. FROM `tablename`
     
  17. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я не знал что так можно , спасибо, как говорится с опытом всё проходит , учитывая что всё я учил в поисковике гугл )))
    --- Добавлено ---
    Ip адреса также стоит хранить aton или что-то такого видел или можно varchar (15 )?
     
  18. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    На первых порах можно хранить и то, и это. Преобразованное - для работы, как есть - для отображения в PMA
    Когда таблица разрастется, придется выбрать что-то одно. Опытным путем
     
  19. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Я думаю не много уже буду лучше понимать что происходит к тому моменту))
    Спасибо за подсказки, поскольку возможности затестить нету пока что финальный варик
    PHP:
    1. if($test['utime'] < (time() - 86400 * 31))
    2.     //Удалили или что мне нужно
    Верно я понял ?
     
  20. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Да. Но нет предела совершенству.
     
  21. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    А если так тогда мне нужно настраивать часовой пояс под себя ? Для strtotime
    PHP:
    1. if($test['utime']< strtotime('-'.MAX_LIFETIME.' days')
    --- Добавлено ---
    В общем спасибо буду разбираться читать что происходит такие запросы не использовал ещё )) ели с джоинами разобрался а оказалось мне не нужен пока что, а как придется забуду :D
     
  22. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Опять "не всё так однозначно".
    Если планируются переезды, то да
     
  23. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Ладно , пытаюсь прыгнуть выше головы, спасибо пожалуй time() использовать буду бо пока что как я говорил опыта не много 3 месяца гугл обучения подсказок, попыток ))
     
  24. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    945
    Симпатии:
    146
    Рекомендую часовые пояса для PHP и БД хранить в своём конфиге, при каждом старте скрипта их устанавливать, поможет избежать многих неожиданностей.
     
  25. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Спасибо