2

我有一个页面显示未来事件以及日期(服务器时间)。我需要一些方法来显示用户时间的日期。

示例:
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'];
    }
?>

不同的是,我想检测用户时区。

谢谢你。

编辑 我知道我不应该使用 mysql_*

4

3 回答 3

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中。

于 2012-10-26T14:56:19.873 回答
0

您需要从该日期创建DateTime对象,然后将DateTimeZone应用于该对象。

于 2012-10-26T14:33:55.273 回答
0

您需要从用户那里获取时区。

您可以通过提供一个包含用户可以选择和提交的时区的下拉菜单来完成此操作。为了使这更加用户友好,您可以使用一些 geoip 功能来检测国家和地区,然后确定用户的默认时区。通过 IP 保持在我的那个位置并不是 100% 准确的,而是对用户可能位于何处的有根据的猜测。

或者,您可以使用 ajax 将时区发送到服务器,然后进行相应更新。

于 2012-10-26T14:40:39.670 回答