PHP JS将日期转换为用户时区

时间:2012-10-26 14:24:15

标签: php javascript

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

例:
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 _ *

3 个答案:

答案 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将时区发送到服务器,然后相应地更新。