Dynemically时区不适用于laravel

时间:2017-07-05 09:31:27

标签: laravel timezone

我在我的应用中设置了动态时区,但它显示错误的结果。这是我的代码

    $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');获得时区,然后它显示完美但是当我打印datetime对象时它会显示不同的时区,所以我该如何解决这个问题。我也尝试清除缓存,清除编译,清除配置,清除路由,清晰视图但它没有显示正确的结果

1 个答案:

答案 0 :(得分:0)

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

您可以在DateTime中使用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>");
}