Как ответил Стюарт Сьерра в после потока , вариативные методы не поддерживаются и, возможно, не будут поддерживаться в будущем
Может быть несколько причин, почему это происходит, и мы не можем сказать вам, почему, потому что мы не знаем ваше приложение, поскольку оно может где-то изменить часовой пояс во время выполнения.
Вместо этого вы должны прекратить использовать strtotime
и охватить объектно-ориентированные функции DateTime
.
Используя DateTime
, вы можете определить свою дату вместе с ее часовым поясом:
// local time
$date = new \DateTimeImmutable('1/1/2019', new \DateTimeZone('Europe/Bucharest'));
echo $date->format('U > d.m.Y (e)') , '<br>';
// convert to UTC
echo $date->setTimeZone(new \DateTimeZone('UTC'))->format('U > d.m.Y (e)');
Библиотека довольно мощная и гораздо более многословная, чем работа со строками и временными метками Unix.
Укажите час и часовой пояс для функции, используя полный формат IS0 8601 2019-01-01T12:00:00+00:00
. Таким образом, вы получите правильную метку времени в UTC. Если вы не используете час, я рекомендую использовать 12 часов утра.
В следующем примере я буду использовать числовой массив дат для построения этой строки
// [Y,m,d]
$date = [2019,1,1];
for($i=1; $i<3; $i++){
$date[$i] = str_pad($date[$i],2,'0',STR_PAD_LEFT);
}
$t1 = strtotime(implode('-',$date).'T12:00:00+00:00');
echo date('r',$t1);
//=>Tue, 01 Jan 2019 12:00:00 +0000