В своей базе данных я использую CURRENT_TIMESTAMP, чтобы отслеживать даты регистрации моих новых пользователей. Теперь я хочу создать список пользователей, которые зарегистрировались за последние 7 или 30 дней. Я подумал, что это будет так просто, как описано в этой теме; Получите дату назад на 30 дней вместе со временем

Но мой текущий код дает неожиданный результат.

                for($i = 0; $i < $userlenght; $i++){
                    $comparedate = strtotime(date('Y-m-d', $user[$i]["date"]));
                    echo $comparedate . "<br/>";
                    if($user[$i]["date"] > $last){
                        //do stuff here with the users who match.
                    }
                }

Это отображает значение $ compareate как "-3600", и я не знаю почему.

Может ли кто-нибудь дать представление?

1
Daniel de Ridder 14 Сен 2018 в 16:31

2 ответа

Лучший ответ

Метка времени SQL возвращается в формате строки, поэтому вам нужно указать PHP, чтобы она считывала строку как значение в формате даты. Для этого вам нужно использовать strtotime().

Попробуйте следующее:

for($i = 0; $i < $userlenght; $i++){
       $comparedate = strtotime(date('Y-m-d', strtotime($user[$i]["date"])));
       echo $comparedate . "<br/>";
       if($user[$i]["date"] > $last){
             //do stuff here with the users who match.
       }
}
1
Alberto 14 Сен 2018 в 13:40

Ваша проблема в том, что $user[$i]['date'] - это метка времени MySQL, которая выглядит как 2018-09-14 11:09:10 и не является допустимым вводом для date. Вы можете просто удалить вызов date, и ваш код должен работать нормально:

$comparedate = strtotime($user[$i]["date"]);
1
Nick 14 Сен 2018 в 13:40