我有来自不同网站的用户,我正在以标准的'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
答案 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)
您可以获取支持的时区列表,将其保存在文件中并比较您获得的时间: