如何将不带时区的 ISO 8601 时间戳转换为带 PHP 中时区的 ISO 8601 时间戳?
How to convert ISO 8601 timestamp without timezone to ISO 8601 timestamp with timezone in 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 格式获取所需本地时间日期的正确方法是什么?
您可以设置 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";
使用 DateTime
class:
// 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');
我的时间戳是这样的:
$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 格式获取所需本地时间日期的正确方法是什么?
您可以设置 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";
使用 DateTime
class:
// 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');