php 正在验证来自其他站点的时区“name”?

xt0899hw  于 2023-01-08  发布在  PHP
关注(0)|答案(5)|浏览(150)

我有来自不同站点的用户,并且我让该站点以标准'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
uplii1fm

uplii1fm1#

使用DateTimeZone::listIdentifers()

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

pu82cl6c2#

针对tz database进行验证,http://code.google.com/p/tzdata/声称以PHP格式提供tz数据库(不管这意味着什么)。

thtygnil

thtygnil4#

有个帮手:timezone_identifiers_list()将返回一个时区字符串数组。然后你可以使用类似in_array的代码来验证它。

if (in_array($timezone, timezone_identifiers_list())) {
    // valid
}
unguejic

unguejic5#

您可以获取支持的时区列表,将其保存在文件中,然后将所获得的时区与列表进行比较:
http://php.net/manual/en/timezones.php

相关问题