【问题标题】:What is the scope of "date_default_timezone_set()" function“date_default_timezone_set()”函数的作用域是什么
【发布时间】:2021-06-16 15:21:11
【问题描述】:

我正在使用 Laravel,我在 config/app.php 文件中设置了时区 "UTC",但我想在 "America/New York" 时区中进行计算,但如果我在任何函数中使用 date_default_timezone_set(),那么它的作用域将用于该特定功能,否则将设置为全局范围

例如

function xyz(){

date_default_timezone_set("America/New York");

}

如果我在这个函数内部设置date_default_timezone_set("America/New York");,它是这个函数内部的作用域,或者是整个应用程序的全局作用域,如果它是整个应用程序的作用域,如何只在函数内部设置这个作用域

谢谢

【问题讨论】:

    标签: php timezone


    【解决方案1】:

    我敢打赌,它是全球性的。您可以保留时区值,使其在函数调用之后与之前相同:

    function xyz(){
        $tz = date_default_timezone_get();
        date_default_timezone_set("America/New York");
        // do stuff
        date_default_timezone_set($tz); // reset timezone to old value
    }
    

    如果你愿意,你可以把它封装成一个自己的函数:

    function xyz(){
        temporary_timezone_transaction("America/New York", function() {
            // do stuff
        });
    }
    
    function temporary_timezone_transaction(string $temporaryTz, Callable $fn) {
        $globalTz = date_default_timezone_get();
        date_default_timezone_set($temporaryTz);
        call_user_func($fn);
        date_default_timezone_set($globalTz); // reset timezone to old value
    }
    

    【讨论】:

    • 从该点开始为该请求全局设置。
    • 我有点困惑,因为我使用过 date_default_timezone_set("America/New York") ;在我们应用程序的一个函数中,我发现它的范围仅适用于该函数,例如我已经像这个函数一样使用它 xyz(){ date_default_timezone_set("America/New York") ; //do stuff } 之后我没有在 UTC 中设置我发现它的范围仅在函数 xyz 中
    • date_default_timezone_set("America/New York") 导致时区为 UTC,因为 PHP 认为“美国/纽约”无效。打开error_reporting,你会看到的。
    • 我是这样写的 date_default_timezone_set('America/New_York');不像这个 date_default_timezone_set("America/New York") 但我在 laravel 中发现它只是功能级别的范围,为什么任何人都可以解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多