2012-10-26 2 views
1

У меня есть страница, которая показывает будущие события вместе с датой (время сервера). Мне нужен какой-то метод для отображения даты в пользовательское время.PHP JS Преобразование даты в пользовательский часовой пояс

Пример:
Октябрь, 26 13:48:23 (сервер)
Октябрь, 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']; 
    } 
?> 

С расширением я хочу определить часовой пояс пользователя.

Спасибо.

EDIT Я знаю, что я не должен использовать mysql_ *

+1

Я знаю, что вы знаете. Тем не менее, [** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются, и на нем начался процесс [устаревания] (http://j.mp/Rj2iVR). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). –

+0

Является ли часовой пояс сервера одинаковым? Это UTC? – JasonWyatt

+0

@JasonWyatt Да. –

ответ

0

Если вы нормально с выполнением преобразования в часовом поясе пользователя в 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.

+0

Спасибо, но как я могу отформатировать дату, так как я выводил ее с помощью PHP следующим образом: Oct, 26 13:48:26 –

+0

Я отредактировал сообщение, чтобы показать вам, как получить значение, о котором вы спрашивали :) – JasonWyatt

0

Вам нужно будет получить часовой пояс от пользователя.

Вы можете выполнить это, предложив выпадающий список с часовыми поясами, которые пользователь может выбрать и отправить. Чтобы сделать это немного более удобным для пользователя, вы можете использовать некоторые функции геоида для определения страны и региона, а затем определить часовой пояс по умолчанию для пользователя. Храните ли я в этом месте по IP не на 100% точнее, а вместо этого просвещенное предположение о том, где находится пользователь.

Альтернативно вы можете использовать ajax для отправки часового пояса на сервер и затем соответствующим образом обновить его.

+0

** В качестве альтернативы вы можете использовать ajax для отправки часового пояса на сервер и затем соответствующим образом обновить. ** Как это сделать? –

Смежные вопросы