您是否注意到如果您在任何调用之前在脚本中设置实际时区,那么该date()函数的工作速度比平时快2倍date()?我对此非常好奇.
看看这段简单的代码:
<?php
$start = microtime(true);
for ($i = 0; $i < 100000; $i++) date('Y-m-d H:i:s');
echo (microtime(true) - $start);
?>
Run Code Online (Sandbox Code Playgroud)
它只date()使用for循环100,000次调用函数.我得到的结果总是大约1.6秒(Windows,PHP 5.3.5),但......
如果我在开始之前再次设置相同的时区添加一条荒谬的行:
date_default_timezone_set(date_default_timezone_get());
Run Code Online (Sandbox Code Playgroud)
我得到的时间低于800毫秒 ; 快2倍(同一台服务器).
我正四处寻找这种行为的任何合理解释,但没有任何成功.从我的角度来看,这个额外的行没用,但PHP不同意我的看法.
我已经在两个Linux服务器(不同的PHP版本)上尝试了这个测试,并且得到了不同的结果时间,但比例为6:1.
注意:php.ini中的date.timezone属性已正确设置(欧洲/巴黎).
我在这里搜索相关问题并没有找到类似的东西.我还检查了date_default_time_zone()函数@php.net的手册,发现我不仅是一个注意到这一点的人,但仍然无法理解为什么会发生这种情况?
任何人?
我有来自不同网站的用户,我正在以标准的"tz"格式将该网站发送到他们的时区
Antarctica/Casey Antarctica/Davis
Antarctica/DumontDUrville Antarctica/Macquarie
Antarctica/Mawson Antarctica/McMurdo
Run Code Online (Sandbox Code Playgroud)
我如何验证这个'字符串'是否是一个有效的时区条目?
这就是我正在做的事情
$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);
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它 - 似乎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
Run Code Online (Sandbox Code Playgroud)
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 …Run Code Online (Sandbox Code Playgroud) 我已经尝试使用以下代码生成http://php.net/manual/en/timezones.php(UTC除外)中指定的完整时区.
$zones = timezone_identifiers_list();
print_r($zones);
Run Code Online (Sandbox Code Playgroud)
但是这个列表似乎跳过了大约50个地区,例如:太平洋/萨摩亚(与http://php.net/manual/en/timezones.php相比)
我们做错了什么?
phpinfo()显示:
PHP Version 5.3.4
Apache Version Apache/2.2.3 (CentOS)
$ uname -r
2.6.18-028stab070.14
Run Code Online (Sandbox Code Playgroud)
编辑#2
date
date/time support enabled
"Olson" Timezone Database Version 0.system
Timezone Database internal
Default timezone UTC
Run Code Online (Sandbox Code Playgroud)