验证时区“名称”;从不同的网站进来?
我有来自不同站点的用户,并且我让该站点以标准“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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用
DateTimeZone::listIdentifers()
use
DateTimeZone::listIdentifers()
根据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).
看看这个:如何检查代码中的时区标识符是否有效?
报告解决问题的不同方法。
Check out this: How to check is timezone identifier valid from code?
Report different approaches to solve your problem.
有一个助手:
timezone_identifiers_list()
将返回时区字符串数组。那么你可以使用类似in_array
的东西来验证它。There is a helper:
timezone_identifiers_list()
will return an array of strings of timezones. then you can use something likein_array
to validate it.您可以获取支持的时区列表,将其保存在文件中并比较您获得的列表:
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