2013-08-21 2 views
0

Я пытался решить эту проблему и потратил часы, чтобы найти причину, по которой это происходит, безрезультатно.Неустранимая ошибка: исключить исключение «Исключение» с сообщением «DateTimeZone ::?

Я действительно не знаю, что я делаю неправильно!

Я пытаюсь создать простую разницу во времени, используя timezones в PHP. Мне нужно разрешить пользователям выбирать оба местоположения на странице. для этого я использую два раскрывающихся списка, которые будут иметь в них все временные интервалы.

Каждый раз, когда я запускаю код/​​страницы на моем сервере, я получаю эту ошибку:

Fatal error: Uncaught exception 'Exception' with message 'DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (origin_tz)' in /home/a1385482/public_html/timediff.php:204

Stack trace:

#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')

#2 {main} thrown in /home/a1385482/public_html/timediff.php on line 204

Вот полный код страницы:

<?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 часов.

+0

Пожалуйста, прекратите размещение тонн не имеет значение код. Уменьшите его до минимума, необходимого для воспроизведения проблемы. – deceze

+2

Вы вызываете 'get_timezone_offset' с 2 строками. Я не думаю, что ''origin_tz'' является допустимым часовым поясом. –

+0

@deceze, ПОЧЕМУ это нерелевантный код ?! Я использую тот же самый код (не несущественный код), и тот же самый код создает ошибку/проблему! –

ответ

4

можно передать «origin_tz» и «» remote_tz конструктору, которые не являются допустимыми часовыми поясами, смотрите здесь: http://www.php.net/manual/en/timezones.php

Я полагаю, вы хотите:

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

Я тоже пробовал! и я получаю Неизвестный или плохой часовой пояс ($ timezone1) 'в –

+0

@SimonPresto: Что такое 'echo $ timezone1?' show? –

+2

@Simon Вы передаете 'get_timezone_offset ($ timezone1, ...)' или 'get_timezone_offset ('$ timezone1', ...)' ?! (Обратите внимание на цитаты.) – deceze