2012-11-12 126 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

中。對不起,這裏不清楚。 –