使用 PHP 和 JS(无 API)获取用户时区(2020 年更新)
检测用户时区分为两步:
使用 Javascript 获取浏览器的时区偏移量,并将其发送到 PHP(通过 AJAX 或其他方式)。
将时区偏移量转换为有效的 TZ 数据库时区名称,例如 America/New_York,Asia/Kolkata。
1) 获取浏览器时区偏移量
Javascript 有一个 getTimezoneOffset 方法,它给出了从当前本地时间到 UTC 的时区差异,以分钟为单位。我们需要将此偏移量传递给服务器。
需要注意的是,getTimezoneOffset 返回一个偏移量,如果本地时区落后于 UTC,则该偏移量为正值,如果超过 UTC,则该偏移量为负值。所以我们必须在偏移量上添加一个相反的符号(+ 或 -)。
var timezone_offset_minutes = new Date().getTimezoneOffset();
timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;
// Timezone difference in minutes such as 330 or -360 or 0
console.log(timezone_offset_minutes);
2) 在 PHP 中,以分钟为单位的时区偏移量转换为时区名称
您可以通过timezone_name_from_abbr函数从时区偏移量中获取时区名称。
// This is just an example. In application this will come from Javascript (via an AJAX or something)
$timezone_offset_minutes = 330; // $_GET['timezone_offset_minutes']
// Convert minutes to seconds
$timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
// Asia/Kolkata
echo $timezone_name;
现在,当您获取时区名称时,您可以获取相对于用户时区的日期和时间:
date_default_timezone_set($timezone_name);
来源:https://usefulangle.com/post/31/detect-user-browser-timezone-name-in-php