相关疑难解决方法(0)

如果我们从代码中设置时区,为什么date()的工作速度要快两倍?

您是否注意到如果您在任何调用之前在脚本中设置实际时区,那么该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的手册,发现我不仅是一个注意到这一点的人,但仍然无法理解为什么会发生这种情况?

任何人?

php timezone datetime micro-optimization

32
推荐指数
1
解决办法
2037
查看次数

验证来自不同网站的时区"名称"?

我有来自不同网站的用户,我正在以标准的"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)

php timezone

13
推荐指数
1
解决办法
4470
查看次数

PHP生成的时区列表不完整

我已经尝试使用以下代码生成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)

php timezone region

3
推荐指数
1
解决办法
4044
查看次数

标签 统计

php ×3

timezone ×3

datetime ×1

micro-optimization ×1

region ×1