Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中设置不同时区的时间设置?_Php_Time_Timezone_Setting - Fatal编程技术网

如何在PHP中设置不同时区的时间设置?

如何在PHP中设置不同时区的时间设置?,php,time,timezone,setting,Php,Time,Timezone,Setting,我用PHP做了一个项目,该项目预计将在我的国家伊朗境内运行,其时区为UTC+3:30。我在代码中插入了以下行: date_default_timezone_set('Asia/Tehran'); 但现在,我认为它可能被来自不同国家的其他人使用。如果此项目包含用户登录日志,我必须设置其所在国家/地区的时区。 如何设置时区?以下是设置时区的方法: <?php session_start(); if(!isset($_SESSION['timezone'])) { if(!isset(

我用PHP做了一个项目,该项目预计将在我的国家伊朗境内运行,其时区为UTC+3:30。我在代码中插入了以下行:

date_default_timezone_set('Asia/Tehran');
但现在,我认为它可能被来自不同国家的其他人使用。如果此项目包含用户登录日志,我必须设置其所在国家/地区的时区。

如何设置时区?

以下是设置时区的方法:

<?php
session_start();
if(!isset($_SESSION['timezone']))
{
    if(!isset($_REQUEST['offset']))
    {
    ?>
    <script>
    var d = new Date()
    var offset= -d.getTimezoneOffset()/60;
    location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
    </script>
    <?php    
    }
    else
    {
        $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
        $index = array_keys($zonelist, $_REQUEST['offset']);
        $_SESSION['timezone'] = $index[0];
    }
}
date_default_timezone_set($_SESSION['timezone']);

//rest of your code goes here
?>

var d=新日期()
var offset=-d.getTimezoneOffset()/60;
location.href=“?offset=“+offset;

但我建议不要这样做。最好将GMT(或您的时区)设置为默认值,并在显示时根据每个用户的当前时区更改日志中的信息

试试这个:

<?php
$fmt = new IntlDateFormatter("fa_IR@calendar=persian", IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL);
echo $fmt->format(time());
?>


信息太少,无法回答此问题。任何具有时区意识的应用程序都需要(a)知道每个用户的时区,并且(b)适当地进行所有时间计算,以说明用户和服务器时区之间的差异。将其设置为一个时区并按此进行操作是值得的。我的做法是在整个项目中设置GMT,并为每个用户设置一个时区。因此,所有用户都将根据自己的时区查看自己的日期时间。@Arfeen的方法是最好的:对所有内部代码使用标准UCT时区,仅在用户输入/输出时将其转换为本地时间。当您需要开始与多个时区的用户打交道时,这会使事情变得容易得多,而且它还避免了具有DST的时区的所有问题(不确定这是否会影响您的本地用户,但可能会影响您在其他地方的用户)。(Arfeen注意——只有当它指的是英国的本地时区时,它才被称为GMT;当使用通用参考点时,它被称为UCT。GMT和UCT基本相同)@Arfeen,谢谢你宝贵的回答。您知道我可以找到国家及其UTC值列表的来源吗?