致命错误:消息'DateTimeZone ::?'未捕获异常'异常'

时间:2013-08-21 18:22:41

标签: php

我一直在努力解决这个问题,并且花了几个小时才找到这种情况继续发生的原因而无济于事。

我真的不知道我做错了什么!

我正在尝试使用PHP中的时区创建一个简单的时差。我需要允许用户在页面上选择这两个位置。为此,我使用两个下拉列表,其中包含所有时区。

每次我在服务器上运行代码/页面时,都会收到此错误:

  

致命错误:消息'DateTimeZone :: __ construct()[datetimezone .-- construct]的未捕获异常'异常':/home/a1385482/public_html/timediff.php:204中的未知或错误时区(origin_tz)' / p>      

堆栈追踪:

     

#0 /home/a1385482/public_html/timediff.php(204):DateTimeZone-> __ construct('origin_tz')

     

#1 /home/a1385482/public_html/timediff.php(215):get_timezone_offset('origin_tz','remote_tz')

     第204行/home/a1385482/public_html/timediff.php中

#2 {main}

以下是整页代码:

<?php
echo "Version: " . phpversion();
?> 

<form method="post" action="">
  <select name="timezone2" id="timezone2" class="timezone2">
    <option value="Pacific/Midway">(GMT-11:00) Midway Island, Samoa</option>
    .. snip ..
</select>
  <select name="timezone1" id="timezone1" class="timezone1">
    <option value="Pacific/Midway">(GMT-11:00) Midway Island, Samoa</option>
    .. snip ..
  </select>
<input type="submit" name="submit" value="send"/>

</form>


<?php
if( isset($_POST['submit']))
{
    //be sure to validate and clean your variables
    $timezone1 = htmlentities($_POST['timezone1']);
    $timezone2 = htmlentities($_POST['timezone2']);

    //then you can use them in a PHP function. 
    function get_timezone_offset( $origin_tz, $remote_tz ) {
          $timezone1 = new DateTimeZone( $origin_tz );
          $timezone2 = new DateTimeZone( $remote_tz );

          $datetime1 = new DateTime("now", $timezone1);
          $datetime2 = new DateTime("now", $timezone2);

          $offset = $timezone1->getOffset($datetime1) - $timezone2->getOffset($datetime2);
          return $offset;

    }

    $offset = get_timezone_offset('origin_tz', 'remote_tz');
    echo $offset/3600;
}

?>

有人可能会对此有所了解,因为我被困在这个上将近8个小时。

1 个答案:

答案 0 :(得分:4)

您将'origin_tz'和'remote_tz'传递给构造函数,这些构造函数不是有效的时区,请参见此处:http://www.php.net/manual/en/timezones.php

我想你想要:

$offset = get_timezone_offset($timezone1, $timezone2);