dongzhui2636 2011-02-23 21:27
浏览 40
已采纳

如何在php日期更改时区?

I have a date stored in a database in this format:

2011-02-23 13:00:00

I need to return it in ISO8601 format, but it needs to be set to a specific time zone (which is not necessarily the time zone of the server.) What I want to return is this:

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

Using this code:

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

I get this:

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

Is there any way to reset the time zone in the date or strtotime function, or do I need to strip off the 5 rightmost characters and concatenate the desired timezone stamp to the remaining date/time?

EDITED TO ADD: Although I did accept the solution below of using new DateTime and setting new DateTimeZone, I found an easier way if you don't need to keep resetting the time zone:

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

1条回答 默认 最新

  • dongxi5494 2011-02-23 21:34
    关注

    You could use the DateTime class. Datetime objects can be initialized with a specific time zone, and easily transposed to others.

    Modified from the manual:

    $date = new DateTime('2011-02-23 13:00:00', new DateTimeZone('Pacific/Nauru'));
    echo $date->format('c') . "
    ";
    
    $date->setTimezone( new DateTimeZone('Europe/Berlin'));
    echo $date->format('c') . "
    ";
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大