Задать вопрос
@tarroma9

Как формируется Unix-время в PHP?

Добрый день! Помогите разобраться в основах Unix - времени, не дающем мне покоя.
Нашел на просторах интернетов следующий код, позволяющий сложить два времени:
$time = "12:30";
$time2 = "07:30";
 
$secs = strtotime($time2) - strtotime("00:00:00"); // это просто время
$base = strtotime($time); // это дата (сегодня) + время
 
echo date("H:i:s", $base + $secs) . "\n"; // "20:00:00", дату мы просто не выводим


Вначале мы получаем время со стандартной датой:
Значения первых двух функций, входящих в переменные в формате date() следующие.
07:30:10 Wednesday 12th of February 2020 07:30:10 AM int(1581489010)
00:00:00 Wednesday 12th of February 2020 12:00:00 AM int(1581462000)

Но если мы удаляем одну от другой:
$secs = strtotime($time2) - strtotime("00:00:00");

То получаем следующее число:
$secs (07:30:10 - 00:00:00) Thursday 1st of January 1970 08:30:10 AM int(27010)
Т.е. получается что число на час больше.

Дальше, я попробовал вывести с помощью функции date() число с int(1) и получилось следующее:
int(1) Thursday 1st of January 1970 01:00:01 AM int(1)
Отсюда стало понятно, как в той переменной значение увеличивается на час.

И это несмотря на то, что написано даже в википедии, что отсчет Unix-формата начинается с 00:00 1 января 1970.

Но не совсем понятно, норма ли это, когда написано везде, что отсчет начинается с нулей ( в моем случае, соответственно int(2) будет являться 01:00:02).

Ок. А теперь, каким-то образом, прибавляя два числа, мы получаем абсолютно нормальную дату и время, хотя казалось бы, она должна быть на час больше???
echo date("H:i:s", $base + $secs) . "\n"; // "20:00:00",


Помогите разобраться с этими тонкостями времени, пожалуйста. Может это я туплю и в упор не замечаю очевидного (вероятно, так и есть).
  • Вопрос задан
  • 170 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
DevMan
@DevMan
на что только не пойдут люди, лишь бы не использовать DateTime.

$date = new DateTime('12:30');
$date->add(new DateInterval('PT07H30M'));
echo $date->format('H:i:s');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы