带有自定义偏移的PHP默认时区(或日期)使用日期()

时间:2015-05-07 15:13:25

标签: php date timezone offset overrides

PHP 中,我使用date_default_timezone_set设置默认时区。

然后每当我使用date('m/d/y g:i A')时,无论客户端的位置如何,它都会为我提供该时区的正确时间。

但是,当页面加载以分钟为单位设置时,我需要能够设置用户定义的默认时区偏移量。所以它可以是 -99999到0到99999。

我无法弄清楚如何将偏移量与默认时区设置进行整合。

我见过很多关于如何使用 UTC GMT 偏移的信息,但没有关于自定义默认时区偏移(以分钟或秒为单位)的信息。

我希望有人对此有一些经验,可以指出我正确的方向。

显然,如果没有定义自定义日期包装并每次获取和分配偏移量,PHP都是不可能的。

除了我之外,还有其他人认为这应该包含在PHP中吗...

date_default_timezone_set($timezone, $optionalCustomOffset);

我要提交RFC

非常感谢任何帮助。

由于

Pet0

2 个答案:

答案 0 :(得分:0)

-new Date().getTimezoneOffset()/60;

getTimezoneOffset()会从GMT中扣除您的时间并返回分钟数。因此,如果你住在GMT-8,那么它将返回480.要把它分成几小时,除以60.另外,请注意标志与你需要的相反 - 它是计算GMT与你的时区的偏差,而不是你的时区偏离GMT。要解决这个问题,只需乘以-1即可。

就地理位置而言,我在几个项目中使用了MaxMind GeoIP并且运行良好,但我不确定它们是否提供时区数据。这是您支付的服务,它们每月为您的数据库提供更新。他们用几种网络语言提供包装。

答案 1 :(得分:0)

更新

好吧,在我测试之后,如果它有效,我认为这对于我正在寻找的答案是平等的,所以必须标记我自己的答案是正确的,除非有人会站出来告诉我.... / p>

  

(注意:重命名和覆盖功能需要PECL APD   安装。)

if (function_exist('__overridden__')) 
    { rename_function('__overridden__', 'dummy-override'); }
rename_function('date', 'date-native');
override_function('date', '$s ="l, F jS, Y, g:i:s A", $t = null', 'return izDate($s ="l, F jS, Y, g:i:s A", $t = null);');
rename_function("__overridden__", 'date-override');  
function izDate($s = 'l, F jS, Y, g:i:s A', $t = null) {
    $file = ('../timezone.config');
    $f = file_get_contents($file);
    $offset = getTzValue($f, 'offset');
    $time = $t === null ? time() : $t;
    $time += $offset ? (int) $offset : 0;
    return date-native($s, $time);
}

END UPDATE

我没有太多时间等待这个问题的答案,所以这就是我解决它的方法。如果有人有更好的解决方案,或者甚至可以帮我写一个更好的包装器,我将授予复选标记。

      function izDate($s, $t=null) {
          $file = ('../timezone.config');
          $f = file_get_contents($file);
          $offset = getTzValue($f, 'offset');
          $time = $t===null ? time() : $t;
          $time += $offset ? (int) $offset : 0;
          return date($s, $time);
      }