Подтвердить, что название часового пояса приходит с другого сайта? - PullRequest
13 голосов
/ 18 апреля 2011

У меня есть пользователи, пришедшие с другого сайта, и я получаю этот сайт для отправки через их часовой пояс в стандартном формате 'tz'

 Antarctica/Casey    Antarctica/Davis   
 Antarctica/DumontDUrville  Antarctica/Macquarie 
 Antarctica/Mawson  Antarctica/McMurdo

Как мне проверить, что эта строка'входящий - это допустимый вход в часовой пояс?


это то, что я делаю

        $script_tz = date_default_timezone_get();
        if(!date_default_timezone_set($specifiedTimeZone))
        {
            date_default_timezone_set($script_tz);
            $errormessage = "Invalid TimeZone";
            return;         
        }
        date_default_timezone_set($script_tz);

но мне это не нравится - кажется глупым.


тестирование:

Тест1

$test1 = 'America/New_York';
$test2 = 'junk';

$start = microtime(true);
for($i=1;$i<10000;$i++)
{
    if (in_array($test1, DateTimeZone::listIdentifiers())) {}else {}
    if (in_array($test2, DateTimeZone::listIdentifiers())) {}else {}
}

$end = microtime(true);

echo $end-$start;
?>

9.7208099365234

Тест2

<?php

$test1 = 'America/New_York';
$test2 = 'junk';

error_reporting(0);
$start = microtime(true);
for($i=1;$i<10000;$i++)
{
        $script_tz = date_default_timezone_get();
        if(!date_default_timezone_set($test1))
        {
                date_default_timezone_set($script_tz);
        }
        else
                date_default_timezone_set($script_tz);
        $script_tz = date_default_timezone_get();
        if(!date_default_timezone_set($test2))
        {
                date_default_timezone_set($script_tz);
        }
        else
                date_default_timezone_set($script_tz);
}


$end = microtime(true);

echo $end-$start;
?>

0.25762510299683

Ответы [ 5 ]

23 голосов
/ 18 апреля 2011

использование DateTimeZone::listIdentifers()

if (in_array($timezone, DateTimeZone::listIdentifiers())) {
    echo "valid";
}
else {
    echo "invalid";
}
0 голосов
/ 09 августа 2012

Проверьте это: Как проверить правильность идентификатора часового пояса из кода?

Сообщите о различных подходах для решения вашей проблемы.

0 голосов
/ 18 апреля 2011

Вы можете взять список поддерживаемых часовых поясов, сохранить его в файле и сравнить, что вы получаете с этим списком:

http://php.net/manual/en/timezones.php

0 голосов
/ 18 апреля 2011

Проверка по базе данных tz .http://code.google.com/p/tzdata/, утверждает, что предоставляет базу данных tz в формате PHP (что бы это ни значило).

0 голосов
/ 18 апреля 2011

Поиск в полном списке / наборе / хэше действительных имен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...