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