在PHP 5.2中模仿PHP 5.3 DateTime

时间:2009-09-02 17:58:24

标签: php datetime php-5.2

我在本地计算机上使用PHP 5.3中的DateTime对象进行了一些有用的操作,但是我的主机(NFS)只运行了5.2,并且在5.3.1结束之前不打算升级。

所以我的问题是,这个代码是否可以使用5.2? 具体来说,5.2

中不存在DateTime :: getTimestamp

nicetime.php包含类似于这里的http://cz2.php.net/manual/en/function.time.php#89415基本上它只输出时间戳之前/之前的时间长度)     

include('include/nicetime.php');

if(isset($_GET['hour']) && isset($_GET['min']) && isset($_GET['AP']) && isset($_GET['TZ'])){
    if($_GET['AP'] == 'PM'){
        $reqHour = $_GET['hour']+12;
    }else{
        $reqHour = $_GET['hour'];
    }

    $reqHour = ($_GET['AP'] == 'PM' ? $_GET['hour']+12 : $_GET['hour']);
    $reqMin = ($_GET['min'] == 0 ? '00': $_GET['min']);

    date_default_timezone_set($_GET['TZ']); 
    $reqDate = date_create($reqHour.':'.$reqMin);

    echo '<h3>'.nicetime($reqDate->getTimestamp()).'</h3>';
}

?>

如果你想知道它的重点是什么,用户想要知道在一个时区中某个时间段与他们不同的时间。例如,什​​么时候在英格兰是什么时候?从现在起2个小时。

2 个答案:

答案 0 :(得分:12)

最后一行必须翻译成

echo '<h3>' . $reqDate->format('U') . '</h3>';

为了使用PHP 5.2。除此之外,它看起来还不错。

修改 您可以继承DateTime以提供向前兼容的解决方案:

class MyDateTime extends DateTime {
    public function getTimestamp() {
         return method_exists('DateTime', 'getTimestamp') ? 
             parent::getTimestamp() : $this->format('U');
    }
}

答案 1 :(得分:1)

这是一个非常完整的DateTime 5.2扩展。请查看我对setTimestamp的评论来解决你的time_zone问题

https://gist.github.com/SeanJA/349273