使用 JavaScript 和 PHP 很简单:
尽管用户可能会弄乱他/她的内部时钟和/或时区,但到目前为止我找到的获得偏移量的最佳方法仍然是 new Date().getTimezoneOffset();。它是非侵入性的,不会让人头疼,并且无需依赖第三方。
假设我有一个表 users,其中包含一个字段 date_created int(13),用于存储 Unix 时间戳;
假设客户端creates a new account,数据由post接收,我需要insert/updatedate_created column带有客户端的Unix时间戳,而不是服务器的。
由于在插入/更新时需要 timezoneOffset,因此在客户端提交表单时将其作为额外的 $_POST 元素传递,从而无需将其存储在会话和/或 cookie 中,也无需额外的服务器命中。
var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;
假设服务器接收tzo 为$_POST['tzo'];
$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);
插入/更新date_created=$user_timestamp。
在检索 date_created 时,您可以像这样转换时间戳:
$date_created = // Get from the database
$created = date("F j, Y, g:i a",$date_created); // Return it to the user or whatever
现在,此示例可能适合您的需求,当涉及到插入 first 时间戳时......当涉及到额外的时间戳或表时,您可能需要考虑将 tzo 值插入到 users 表中未来参考,或将其设置为会话或 cookie。
附:但是,如果用户旅行并切换时区怎么办。在 GMT+4 登录,快速到达 GMT-1 并再次登录。上次登录将在将来。
我认为……我们想太多了。