date — Как преобразовать метку времени ISO 8601 без часового пояса в метку времени ISO 8601 с часовым поясом в PHP?

Моя временная метка такая:

$timestamp = "2018-08-28T08:49:44+00:00";

Легко преобразовать это в метку времени Unix:

$unixtime = strtotime($timestamp);
echo $unixtime; // result: 1535446184

Мой желаемый результат — получить метку времени с часовым поясом для моего текущего часового пояса. Должно быть так:

$timestamp_with_timezone = "2018-08-28T10:49:44+02:00";

Однако если я сделаю:

echo date('c',$unixtime);

Результат снова:

2018-08-28T08:49:44+00:00

Как правильно получить нужную дату по местному времени в формате ISO 8601?

0

Решение

С использованием DateTime учебный класс:

// DateTime automatically parses this format, no need for DateTime::createFromFormat()
$date = new DateTime("2018-08-28T08:49:44+00:00");

// Set the timezone (mine here)
$date->setTimezone(new DateTimeZone('Europe/Paris'));

// Output: 2018-08-28T10:49:44+02:00
echo $date->format('c');

3

Другие решения

Вы можете установить TimeZone объекта DateTime:

$timestamp = "2018-08-28T08:49:44+00:00";

$date = date_create($timestamp);

$date->setTimezone(new DateTimeZone('Europe/Amsterdam'));

echo date_format($date, 'Y-m-d H:i:sP') . "\n";
1

По вопросам рекламы [email protected]