【问题标题】:How can I change timezones in a php date?如何更改 php 日期中的时区?
【发布时间】:2011-02-23 21:27:40
【问题描述】:

我有一个日期以这种格式存储在数据库中:

2011-02-23 13:00:00

我需要返回ISO8601格式,但是需要设置一个特定的时区(不一定是服务器的时区)我要返回的是这样的:

2011-02-23T13:00:00-0600

使用此代码:

echo date(DATE_ISO8601, strtotime("2011-02-23 13:00:00"));

我明白了:

2011-02-23T13:00:00+0000

有没有办法在 date 或 strtotime 函数中重置时区,还是我需要去掉最右边的 5 个字符并将所需的时区戳连接到剩余的日期/时间?

编辑添加: 尽管我确实接受了以下使用新 DateTime 和设置新 DateTimeZone 的解决方案,但如果您不需要继续重置时区,我找到了一种更简单的方法:

date_default_timezone_set('America/Chicago');
$startTime = date(DATE_ISO8601, strtotime("2011-02-23 13:00:00"));

【问题讨论】:

    标签: php datetime


    【解决方案1】:

    您可以使用DateTime 类。 Datetime 对象可以使用特定的时区进行初始化,并且可以轻松地转换为其他时区。

    根据手册修改:

    $date = new DateTime('2011-02-23 13:00:00', new DateTimeZone('Pacific/Nauru'));
    echo $date->format('c') . "\n";
    
    $date->setTimezone( new DateTimeZone('Europe/Berlin'));
    echo $date->format('c') . "\n";
    

    【讨论】:

    • 谢谢!我仍然需要使用 DATE_ISO8601 常量进行格式化,因为“c”在时区偏移的小时/秒之间粘贴了一个冒号,并且我们提交此数据的 Web 服务非常挑剔。否则,这正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2021-07-12
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2011-01-11
    相关资源
    最近更新 更多