В своей базе данных я использую 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", и я понятия не имею, почему.
Может ли кто-нибудь дать некоторое представление?






Метка времени 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.
}
}
Ваша проблема в том, что $user[$i]['date'] - это временная метка MySQL, которая выглядит как 2018-09-14 11:09:10 и не является допустимым вводом для date. Вы можете просто удалить вызов date, и ваш код должен работать нормально:
$comparedate = strtotime($user[$i]["date"]);
Видите ли, ничего подобного не было упомянуто в других темах, которые я смог найти, но я решил, что проблема где-то там. Спасибо, Ник!
Когда я фильтрую его с помощью двух функций "strtotime", он просто производит длинный список чисел.
$comparedate = date('Y-m-d', strtotime($user[$i]["date"]));дал мне красиво отформатированную дату. Однако без вашего комментария я бы этого не понял, спасибо, Альберто!