我们正在开发一个网站,将用于世界各地的人们。网站上有一个聊天部分,我们希望这些消息带有时间戳。我在数据库中存储每条消息的时间戳。
根据当地时间,向访客显示每条消息的正确时间的方法是什么。
我不想问用户他的时区。有没有办法做到这一点,只使用PHP?如果不是 - 根据访问者的当前时间,使用javascript显示当前时间的方式是什么?
答案 0 :(得分:7)
您可以使用地理IP对用户时区进行有根据的猜测
http://php.net/manual/en/book.geoip.php
或者您可以使用javascript:
http://www.onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/
答案 1 :(得分:1)
如果您知道用户的IP地址($ _SERVER ['REMOTE_ADDR']),则可以使用PHP完成此操作。 查看Geo-IP(http://php.net/manual/en/book.geoip.php)以获取匹配位置< - > ip-address
如果(例如)他/她在代理后面,则IP地址不需要反映用户的“真实”位置。我在使用移动设备(GPRS / edge / 3G / HSDPA)时也看到了一些奇怪的行为。
答案 2 :(得分:0)
我不知道如何在PHP中执行此操作,但由于您也在询问javascript,因此可以使用Date
对象。
var d = new Date(); // creates a Date object and initializes it with
// user's current time
d.getTimezoneOffset(); // time zone offset in minutes
d.getDay();
d.getHours();
/* etc... gets information about the user's local time */
完整参考:http://www.w3schools.com/jsref/jsref_obj_date.asp
另请注意,这当然是基于用户的计算机时间设置。它不会根据用户的网络地址检查用户的全球位置。如果你真的想这样做,那么忽略我的答案:)
答案 3 :(得分:0)
正如其他答案所说,Javascript是正确的技术,但是如果你坚持使用php,那么你可以做的一种可能的方法是使用地理定位库或服务来定位从IP地址猜测时区
然而,这将始终是最佳猜测解决方案,并且在许多情况下,访问者来自的IP地址,可能不同意用户当前所在的时区。
答案 4 :(得分:0)
准确显示在用户PC上设置的时间的唯一保证方法是使用JavaScript。您可以尝试服务器端地理检测,但数据库永远不会完美,或者用户可能是来自绝对不同时区的某个提供商的远程客户端。从Unix纪元时间以秒为单位发送您的时间戳,然后在此时用JavaScript初始化Date
object并使用其.get(无UTC)方法在用户的本地表示中检索相应的时间段。为用户提供使用某些特定时区的选项,以防他出于某种原因想要覆盖当地时间也是一个好主意。
答案 5 :(得分:0)
如果有人想在访问者的系统时区中显示PHP时间
<?php
$now = new DateTime();
$date_created=$now->format('Y-m-d H:i:s');
$contents = htmlentities("<script>var x=new Date('$date_created' +'+0000');document.write(x.getMonth() + '-' + x.getDate() + '-' + x.getFullYear()+ ' ' + x.getHours() + ':' + x.getMinutes());</script>");
echo html_entity_decode($contents);
?>
这将显示访问者所在时区的服务器时间。如果您将服务器时间设置为UTC +00。如果有人要更改格式,可以使用此javascript函数
function detectAmPm(hours, min) {
let time;
if (hours >= 12) {
time = "PM";
hours = hours - 12
} else {
time = "AM";
}
if (hours < 10) {
hours = "0" + hours;
}
if (min < 10) {
min = "0" + min;
}
return {min: min, hours: hours, time: time};
}
答案 6 :(得分:-2)
PHP是一种服务器端脚本语言,因此除非使用GeoIP,否则无法获得访问者的本地时间。你应该使用JavaScript。