Я вытаскиваю необработанную информацию о timestamp mysql из $ item_date из базы данных в формате php date:
if (($timestamp = strtotime($item_date)) === false) { echo "The timestamp string is bogus"; } else { echo date('j MY h:i:sA', $timestamp); }
Выход из зоны сервера (UTC):
12 Ноя 2012 05:54:11 PM
но я хочу, чтобы он преобразовывался в соответствии с часовым поясом пользователя
Пример: допустим, если время пользователя 13 ноября 2012 года 07:00:00 (+0800 GMT), а время сервера – 12 ноября 2012 года 11:00:00 (UTC), а временная метка $ item_date – 12 ноября 2012 года 10:30:00 (UTC) так
Пользователь с (UTC) увидит $ item_date как:
12 ноября 2012 г. 10:30:00
и пользователь с (+0800 GMT) увидит $ item_date как:
13 ноября 2012 г. 18:30:00
Как это сделать? благодаря
Это сообщение было обновлено, чтобы включить полноценный пример
<?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('Ymd H:i:sP'); $dt->setTimezone(new DateTimeZone($_SESSION['tz'])); $is = $dt->format('Ymd 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>
Надеюсь, теперь это достаточно ясно;).