在PHP中将时间和日期从一个时区转换为另一个时区

tit*_*tel 42 php timezone

基本上我需要的是一个脚本,当提供时间和时区时,可以在另一个时区返回时间.

我的主要问题是:

  • 从格林尼治标准时间到哪里获得时间偏差 - 是否有可用的公共数据库?
  • 如何同时考虑夏令时(DST)的差异.
  • 如何很好地将它包装在PHP类中 - 或者是否已经有这样的类?

ITr*_*ubs 87

<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
Run Code Online (Sandbox Code Playgroud)

以上示例将输出:

2000-01-01 00:00:00+12:00
2000-01-01 01:45:00+13:45
Run Code Online (Sandbox Code Playgroud)

在php.net上的DateTime Manual上找到

编辑:像Pekka说的那样:DateTime类从5.2开始存在,你首先必须找出哪些方法是真正实现的,哪一个只存在于5.3上.

  • 打败我,删除我的.值得一提的是DateTime从PHP 5.2开始可用 - 有5.1的补丁,但它是实验性的 (3认同)

Shu*_*hur 9

试试这个,可能会有所帮助:)

function converToTz($time="",$toTz='',$fromTz='')
    {   
        // timezone by php friendly values
        $date = new DateTime($time, new DateTimeZone($fromTz));
        $date->setTimezone(new DateTimeZone($toTz));
        $time= $date->format('Y-m-d H:i:s');
        return $time;
    }
Run Code Online (Sandbox Code Playgroud)

一点说明: 该函数需要3个输入,即转换时间,转换时区,当前时区,并以指定格式返回输出。