заставить php strtotime использовать UTC - PullRequest
8 голосов
/ 28 октября 2011

Я видел несколько вопросов по этому поводу, но не получил четкого ответа ... strtotime () будет использовать часовой пояс по умолчанию, установленный для PHP, при преобразовании строки в метку времени unix.

Однако я хочу преобразовать строку в метку времени Unix в формате UTC. Поскольку для этого нет параметров, как это можно сделать?

Строка, которую я пытаюсь преобразовать: 2011-10-27T20: 23: 39, которая уже в UTC. Я хочу представить это как метку времени Unix также в UTC.

Спасибо

Ответы [ 3 ]

14 голосов
/ 28 января 2015

Я понимаю, что этот вопрос очень старый, но я нашел другой вариант, который может быть полезен.Вместо того, чтобы устанавливать и затем возвращать часовой пояс php, вы можете указать часовой пояс как часть строки, передаваемой в strtotime, следующим образом:

echo date_default_timezone_get();
output: America/Chicago

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39'));
output: 2011-10-28 01:23:39

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 America/Chicago'));
output: 2011-10-28 01:23:39

echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 UTC'));
output 2011-10-27 20:23:39

Примечание: я нахожусь на PHP 5.5.9, но это должноработать в любой версии PHP.

9 голосов
/ 28 октября 2011

Установите системный часовой пояс по умолчанию перед совершением вызова strtotime:

date_default_timezone_set('UTC');
echo strtotime('2011-10-27T20:23:39')."\n";

// Proof:
print_r(getdate(strtotime('2011-10-27T20:23:39')));

// IMPORTANT: It's possible that you will want to
// restore the previous system timezone value here.
// It would need to have been saved with
// date_default_timezone_get().

Посмотрите его в действии .

1 голос
/ 25 октября 2018

Оба других ответа действительно хороши.Поскольку у меня та же проблема, я хочу предложить третий вариант.

$utc = new DateTimeZone('UTC');
$dt = new DateTime('2011-10-27T20:23:39', $utc);
var_dump($dt->format('U'));

дает string(10) "1319747019"

...