преобразование strtotime в неправильный часовой пояс

Как ответил Стюарт Сьерра в после потока , вариативные методы не поддерживаются и, возможно, не будут поддерживаться в будущем

1
задан Umar Abdullah 16 January 2019 в 09:00
поделиться

2 ответа

Может быть несколько причин, почему это происходит, и мы не можем сказать вам, почему, потому что мы не знаем ваше приложение, поскольку оно может где-то изменить часовой пояс во время выполнения.

Вместо этого вы должны прекратить использовать 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.

0
ответ дан emix 16 January 2019 в 09:00
поделиться

Укажите час и часовой пояс для функции, используя полный формат 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
0
ответ дан David Lemon 16 January 2019 в 09:00
поделиться
Другие вопросы по тегам:

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