验证时区“名称”;从不同的网站进来?

发布于 2024-11-01 17:49:08 字数 1703 浏览 1 评论 0原文

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

i've got users coming in from a different site and i'm getting that site to send across their timezone in a standard 'tz' format

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

How do i verify that this 'string' coming in is a VALID timezone entry?


this is what i'm doing

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

but i dont like it - seems kludgy.


testing it out:

Test1

$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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

国粹 2024-11-08 17:49:08

使用 DateTimeZone::listIdentifers()

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

use DateTimeZone::listIdentifers()

if (in_array($timezone, DateTimeZone::listIdentifiers())) {
    echo "valid";
}
else {
    echo "invalid";
}
相权↑美人 2024-11-08 17:49:08

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

Validate against the tz database. There's http://code.google.com/p/tzdata/, that claims to provide the tz database in PHP format (whatever this means).

白昼 2024-11-08 17:49:08

看看这个:如何检查代码中的时区标识符是否有效?

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

Check out this: How to check is timezone identifier valid from code?

Report different approaches to solve your problem.

雨落星ぅ辰 2024-11-08 17:49:08

有一个助手:timezone_identifiers_list() 将返回时区字符串数组。那么你可以使用类似 in_array 的东西来验证它。

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

There is a helper: timezone_identifiers_list() will return an array of strings of timezones. then you can use something like in_array to validate it.

if (in_array($timezone, timezone_identifiers_list())) {
    // valid
}
离旧人 2024-11-08 17:49:08

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

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

You could take the list of supported timezones, save it in a file and compare what you're getting to the list:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文