2012-11-12 86 views
7

我从数据库中提取的$ item_date原料产生的mysql时间戳信息作为PHP的日期格式:PHP时间戳日至用户时区

if (($timestamp = strtotime($item_date)) === false) { 
    echo "The timestamp string is bogus"; 
} else { 
    echo date('j M Y h:i:sA', $timestamp); 
} 

输出folowwing服务器区(UTC):

2012年11月12日下午五点54分11秒

,但我希望它根据用户的时区转换

例如:假设用户的时间为2012年11月13日07:00:00(+0800 GMT)和服务器时间为2012年11月12日11:00:00(UTC)和时间戳$ item_date是2012年11月12日下午10点30分00秒(UTC)所以

用户与(UTC)会看到item_date $为:

2012年11月12日下午10点30分00秒

和用户使用(+0800 GMT)会看到item_date $为:

13 2012下午六时30分00秒

十一月我如何把它做? 感谢

+0

如果你知道用户时区,那么你可以使用'date_default_timezone_set('America/Los_Angeles');' – GBD

+0

,但只设置它到一个区域,我希望它能够检测到所有类型的用户区域,如+ 6gmt -8gmt等所有它... –

+0

您是否已将每个用户时区存储在数据库中? – GBD

回答

20

该帖子已被更新,包括一个完整的例子

<?php 
    session_start(); 

    if (isset($_POST['timezone'])) 
    { 
     $_SESSION['tz'] = $_POST['timezone']; 
     exit; 
    } 

    if (isset($_SESSION['tz'])) 
    { 
     //at this point, you have the users timezone in your session 
     $item_date = 1371278212; 

     $dt = new DateTime(); 
     $dt->setTimestamp($item_date); 

     //just for the fun: what would it be in UTC? 
     $dt->setTimezone(new DateTimeZone("UTC")); 
     $would_be = $dt->format('Y-m-d H:i:sP'); 

     $dt->setTimezone(new DateTimeZone($_SESSION['tz'])); 
     $is = $dt->format('Y-m-d H:i:sP'); 

     echo "Timestamp " . $item_date . " is date " . $is . 
      " in users timezone " . $dt->getTimezone()->getName() . 
      " and would be " . $would_be . " in UTC<br />"; 
    } 
?> 

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js"></script> 
<script language="javascript"> 
    $(document).ready(function() { 
     <?php if (!isset($_SESSION['tz'])) { ?> 
      $.ajax({ 
       type: "POST", 
       url: "tz.php", 
       data: 'timezone=' + jstz.determine().name(), 
       success: function(data){ 
        location.reload(); 
       } 
      }); 

     <?php } ?>   
    }); 
</script> 

我希望这是现在很清楚就够了;)。

+0

对不起,我很困惑,我把我的$ item_date时间戳在? –

+1

而不是时间()正好在setTimestamp()函数 –

+1

中。对不起,这里不清楚。 –