php – один час раньше, чем с датой

У меня проблема.

Предположим, у меня такой тип времени.

$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:

  • Объект DateTime
  • DateTime modify ()
  • DateTime getTimestamp ()
  • Формат DateTime ()
  • Список часовых поясов

Код (включая отформатированное время для сравнения) Демо-ссылка :

 $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)