Разница во времени в php дает мне странное количество часов

#php #time #datetime-format

#php #время #datetime-формат

Вопрос:

Мой код

    $start_time= time();
   echo "<BR><BR>";
   echo "start: ".date("G:i:s",$start_time);echo "<BR>";
   echo "now: ".date("G:i:s",time());echo "<BR>";
   echo "difference: ".date("G:i:s",time()-$start_time);echo "<BR>";

   echo "<BR><BR>";
   echo time()-$start_time;
   echo "<BR><BR>";
  

и результат таков

 start: 12:03:41
now: 12:06:04
difference: 10:02:23


143
  

Есть идеи, почему количество часов не равно 0?

Ответ №1:

Вы пробовали явно устанавливать часовой пояс для своего скрипта?

 date_default_timezone_set('UTC');
  

Комментарии:

1. Не могли бы вы объяснить, почему это помогло? 🙂

2. Я не знаю наверняка, но я предполагаю, что date () преобразуется в localtime, а time () возвращает время в UTC — в документах PHP неясно, что происходит.

Ответ №2:

Я думаю, вам следует использовать временную метку unix при вычислении различий в датах.

Смотрите ниже

 $start_time= date("U", time());
sleep(5); //stops execution for 5 seconds
$endtime = date("U",time());
echo date("G:i:s",$endtime - $start_time); //Outputs 0:00:05
  

или что-то подобное для фактических различий в дате / времени

  $start_time= date("U", strtotime("11/11/11 12:53"));
 $endtime = date("U",strtotime("11/11/11 12:59"));
 echo date("G:i:s",$endtime - $start_time);
  

Выводит 0:06:00 6 минут

Комментарии:

1. Может быть, у меня это не работает из-за другого часового пояса? Исправлением для меня было добавление date_default_timezone_set('UTC'); к моему текущему коду.

Ответ №3:

Разница должна быть просто time () — $ start_time, чтобы указать количество секунд, необходимое для запуска скрипта. Если вы передадите его в date, то он выдаст дату через 143 секунды после эпохи Unix. Сделайте формат даты ‘Y / m / d G: i: s’, чтобы точно видеть, что там происходит.