我有一个页面显示未来事件以及日期(服务器时间)。 我需要一些方法来显示用户时间的日期。
例:
10月26日13:48:23(服务器)
10月26日14:48:23(用户时间(UTC +1)) - >事件信息
到目前为止我所拥有的:
<?php
$sql=mysql_query("SELECT * FROM table") or die("Come back later");
while($row=mysql_fetch_array($sql)) {
echo date('M, d H:i:s', strtotime ($row['date'])).' -> '.$row['info'];
}
?>
对于diffence,我想检测用户时区。
谢谢。
修改 我知道我不应该使用mysql _ *
答案 0 :(得分:1)
如果您可以在JavaScript中转换为用户的时区,则可以执行以下操作:
<强> PHP 强>
<?php
$sql=mysql_query("SELECT * FROM table") or die("Come back later");
while($row=mysql_fetch_array($sql)) {
echo '<span class="date">' . date('M, d H:i:s', strtotime ($row['date'])) . ' UTC</span> -> '.$row['info'];
}
?>
JavaScript (使用jQuery实现可读性)
$(function(){
$('.date').each(function(){
var $this = $(this);
// Parse the date string (the format you've given will
// work, and the added UTC above will give JavaScript
// some context)
var dateVal = new Date($this.text());
// JavaScript will convert it to the user's timezone when
// stringifying it (helped by the server timezone specified
// in the PHP.
$this.text(dateVal.toString());
});
});
如果您想以格式Oct, 26 13:48:23
呈现日期,则可以执行以下操作:
var dateString = dateVal.toLocaleString();
var parts = /^\w+ (\w+ \d{1,2}) \d{4} (\d{2}:\d{2}:\d{2})/.exec(dateString);
dateString = parts[1] + ' ' + parts[2];
然后使用$this.text(dateString);
将其注入dom。
答案 1 :(得分:0)
您需要从此日期创建DateTime对象,然后将DateTimeZone应用于该对象。
答案 2 :(得分:0)
您需要从用户那里获取时区。
您可以通过提供用户可以选择和提交的时区下拉列表来实现此目的。为了使这一点更加用户友好,您可以使用一些geoip函数来检测国家和地区,然后确定用户的默认时区。通过IP保持在我的位置不是100%准确,而是有关用户可能位于何处的有根据的猜测。
或者,您可以使用ajax将时区发送到服务器,然后相应地更新。