验证来自不同网站的时区“名称”?

时间:2011-04-18 13:05:50

标签: php timezone

我有来自不同网站的用户,我正在以标准的'tz'格式将该网站发送到他们的时区

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

如何验证此'字符串'是否为VALID时区条目?


这就是我正在做的事情

        $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);

但我不喜欢它 - 看起来像kludgy。


测试出来:

测试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

的Test2

<?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 个答案:

答案 0 :(得分:23)

使用DateTimeZone::listIdentifers()

if (in_array($timezone, DateTimeZone::listIdentifiers())) {
    echo "valid";
}
else {
    echo "invalid";
}

答案 1 :(得分:0)

验证tz database。有http://code.google.com/p/tzdata/,声称以PHP格式提供tz数据库(无论这意味着什么)。

答案 2 :(得分:0)

看看这个:How to check is timezone identifier valid from code?

报告解决问题的不同方法。

答案 3 :(得分:-1)

在有效名称的完整列表/ set / hash中查找?

答案 4 :(得分:-1)

您可以获取支持的时区列表,将其保存在文件中并比较您获得的时间:

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