У меня проблема.
Предположим, у меня такой тип времени.
$date = strtotime($date);
Мне нужно, чтобы он был преобразован в формат Unix-timestamp, но на час раньше. Я пробовал
$date = strtotime($date-86400)
$date = strtotime($date-86400)
, но мне показалось, что это неправильно. Он вернулся 0, когда я прокрался в стол.
Каков подходящий способ достижения этого?
Благодарю.
strtotime предоставит вам временную метку unix вашей даты. Из этой временной метки вы затем вычитаете свой час:
$date = strtotime($date) - 3600; // 3600 = 60 * 60
Если вы вызываете strtotime($date - 3600)
, это похоже на получение времени для -3600 (например, strtotime(-3600)
), что не имеет смысла, потому что strtotime ожидает строку как первый аргумент.
Вы можете сделать:
$testDateStr = strtotime($date); $finalDate = date("Ymd H:i:s", strtotime("-1 hour", $testDateStr));
$testDateStr = strtotime($date); $finalDate = date("Ymd H:i:s", strtotime("-1 hour", $testDateStr));
Надеюсь, поможет
86400 секунд – один день, а не один час.
Вывод strtotime () – это временная метка unix. 3600 секунд раньше – это отметка времени минус один час. Так:
$date = strtotime($somestring); $hourago = $date - 3600;
Или, в зависимости от исходного формата $ somestring:
$hourago = strtotime($somestring . " - 1 hour");
И не забывайте о date_default_timezone_set ()
Попробуйте этот запрос
$query= "insert into yourTable(otherValues, date) values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour))
Используйте DATE_ADD, чтобы вставить значение даты, которое на 1 час меньше текущего времени.
Пока никто не предлагал решение объекта DateTime
, так что я это сделаю. Это самый современный метод обработки даты и времени и не требует вычисления минут и секунд.
Я всегда хотел заглянуть в какую-то декларацию о часовом поясе, чтобы сделать вещи окончательными. Переход на летнее время, как правило, вызывает беспокойство по поводу манипуляций с датами, но, вероятно, в этом случае. Не стесняйтесь изменять часовой пояс для своего случая.
Ссылки на PHP:
Код (включая отформатированное время для сравнения) Демо-ссылка :
$now=new DateTime('NOW UTC'); $now_stamp=$now->getTimestamp(); $formatted_now=$now->format("Ymd H:i:s"); echo "$now_stamp ($formatted_now)\n"; $hour_ago=$now->modify('-1 hour'); $hour_ago_stamp=$hour_ago->getTimestamp(); $formatted_hour_ago=$hour_ago->format("Ymd H:i:s"); echo "$hour_ago_stamp ($formatted_hour_ago)";
Вывод:
1492687193 (2017-04-20 11:19:53) 1492683593 (2017-04-20 10:19:53)