10

我在本地机器上使用 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>';
}

?>

如果您想知道这有什么意义,用户想知道在与他们所处的时区不同的某个时间之前需要多长时间。例如,英格兰的晚上 9 点是什么时候?2小时后。

4

2 回答 2

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');
    }
}
于 2009-09-02T18:04:17.723 回答
1

这是一个相当完整的 DateTime 5.2 扩展。查找我对 setTimestamp 的评论以解决您的 time_zone 问题

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

于 2013-11-10T02:02:27.693 回答