2017-07-05 22 views
0

我已经在我的应用程序中设置了动态时区,但它显示错误的结果。这里是我的代码Dynemically时区不在laravel工作

$timezone = [ 
     'asia_calcutta_time' => 'Asia/Calcutta', 
     'europe_madrid_time' => 'Europe/Madrid', 
     'us_eastern_time' => 'US/Eastern' 
    ]; 
    foreach ($timezone as $timeKey => $timeValue) { 
     \Config::set('app.timezone', $timeValue); 
     echo $timeValue . "<br>Seted time zone => "; 
     echo \Config::get('app.timezone') . "<br>"; 

     print_r(new \DateTime('now')); 
     print_r("<br>"); 
    } 

我的输出

Asia/Calcutta 
Seted time zone => Asia/Calcutta 
DateTime Object ([date] => 2017-07-05 14:51:41.000000 [timezone_type] => 3 [timezone] => Asia/Calcutta) 
Europe/Madrid 
Seted time zone => Europe/Madrid 
DateTime Object ([date] => 2017-07-05 14:51:41.000000 [timezone_type] => 3 [timezone] => Asia/Calcutta) 
US/Eastern 
Seted time zone => US/Eastern 
DateTime Object ([date] => 2017-07-05 14:51:41.000000 [timezone_type] => 3 [timezone] => Asia/Calcutta) 

在这里,我已设置使用\Config::set('app.timezone', $timeValue);和时区的时候,我得到使用\Config::get('app.timezone');那么它的完美展现,但是当我打印的日期时间对象,然后它是显示不同的时区时区后,所以我该如何解决这个问题。我也尝试清除缓存后,清除编译,清除配置,清除路由,清除视图,但它没有显示正确的结果

+0

我觉得我个人遇到的问题与使用'配置::集()'有时候。函数第一次被调用是最后一次工作。你有没有试过一个黑客例如只设置一次,看看它是否打印正确的结果?你也许想用'date_default_timezone_set('Europe/Madrid');' –

+0

'运行一下测试,谢谢,我已经试过'date_default_timezone_set('Europe/Madrid');'它正在工作,但我想改变时区通过laravel的方式没有核心的PHP方式 – Tester

回答

0

我个人遇到过使用Config :: set()有时会遇到的问题。函数第一次被调用是最后一次工作。你可以在这里看到一个参考:Way to use Config::set() twice in a function

你可以把它作为日期时间的DateTimeZone这个使用新的实例,而不是使用Config::set()

foreach ($timezone as $timeKey => $timeValue) { 
    echo $timeValue . "<br>Seted time zone => ".$timeValue; 
    print_r(new \DateTime('now', new \DateTimeZone($timeValue))); 
    print_r("<br>"); 
} 
+0

感谢您的答案,但我想改变整个环境的时区,而不是特定的日期,像'date_default_timezone_set('欧洲/马德里');'通过配置变量的功能变化一样工作。也是我的问题之一是配置时区更改,但为什么时区没有更改日期时间对象? – Tester

+0

哦,我现在明白你的意思了...... –