我有来自不同站点的用户,并且我让该站点以标准'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条答案
按热度按时间uplii1fm1#
使用
DateTimeZone::listIdentifers()
pu82cl6c2#
针对tz database进行验证,http://code.google.com/p/tzdata/声称以PHP格式提供tz数据库(不管这意味着什么)。
ej83mcc03#
看看这个:How to check is timezone identifier valid from code?
报告解决问题的不同方法。
thtygnil4#
有个帮手:
timezone_identifiers_list()
将返回一个时区字符串数组。然后你可以使用类似in_array
的代码来验证它。unguejic5#
您可以获取支持的时区列表,将其保存在文件中,然后将所获得的时区与列表进行比较:
http://php.net/manual/en/timezones.php