timezone_name_from_abbr() not recognizing correctly
基本上我的网站是全球性的,我需要能够检测用户的时区并显示准确的时间。 我有这个非常简洁的脚本,直到现在才能完美地工作。 它需要一个时区偏移量,我用javascript获取并通过cookie。
1 2 3 4 5 6 7 8 | if(!empty($_COOKIE['tz']) && $_COOKIE['tz']>=-12 && $_COOKIE['tz']<=13){ $offset = $_COOKIE['tz']; $tz = timezone_name_from_abbr(null, $offset * 3600, true); if($tz === false) $tz = timezone_name_from_abbr(null, $offset * 3600, false); date_default_timezone_set($tz); }else{ date_default_timezone_set('UTC'); } |
问题是目前我正在测试的时区是欧洲/赫尔辛基,即UTC + 2(没有夏令时),但由于某种原因
通常,不能以任何可靠性或准确性来定位仅基于偏移(例如UTC + 02:00)的精确时区(例如
您可以在此处查看所有时区的列表及其标准和日光偏移。
甚至从时区缩写到时区的想法也不合理,因为几个时区可以共享相同的缩写。例如,"CST"可以是"中央标准时间"(美国),"中央标准时间"(澳大利亚),"中央夏令时"(澳大利亚),"中国标准时间"或"古巴标准时间"。有关详情,请参阅此列表。
考虑到这些问题,PHP会给你一个名为
如果您在检测到用户的时区后,请考虑使用JavaScript库jsTimeZoneDetect。它也不完美,但它总体上起作用,并且基于更合理的算法。