PHP - 如何将ISO 8601日期字符串重新格式化为用户定义的时区

时间:2012-10-17 05:52:45

标签: php timezone iso iso8601

我以这种格式提供日期/时间:2012-10-14T06:00

我可以像这样重写数据:上午6点使用

<?php
function formatDate($date, $format){
    $output = date($format, strtotime($date));
    return $output;
}
?>

<?php echo formatDate('2012-10-14T06:00', 'g:ia'); ?>

输出:上午6:00

哪个好,但如何使用

调整偏移量

date_default_timezone_set( '美洲/洛杉矶');

date_default_timezone_set('欧洲/阿姆斯特丹);

设置为用户时区(无论他们选择什么) - 时间应该在原始时区数据与用户提供的时间之间抵消('Europe / Amsterdam)

因此,如果他们将默认时区设置为其他国家/地区,则时间将在上午8:00或凌晨4:00读取,具体取决于时区偏移量。

基准时区将始终为XXXX-XX-XXTXX:XX格式。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

使用DateTime个对象。手动提取偏移量不会考虑白天节省和其他怪癖。

// use the the appropriate timezone for your stamp
$timestamp = DateTime::createFromFormat('Y-m-d\TH:i', '2012-10-14T06:00', new DateTimeZone('UTC'));
// set it to whatever you want to convert it
$timestamp->setTimeZone(new DateTimeZone('Europe/Amsterdam'));
print $timestamp->format('Y-m-d H:i:s');