Отображение даты / времени в часовом поясе пользователя - на стороне клиента - PullRequest
7 голосов
/ 03 декабря 2009

У меня есть веб-приложение, которое отображает отметки даты и времени на каждой странице, например:

12 декабря 2009 г. 18:00

Я хотел бы динамически определять часовой пояс пользователя и изменять отображение с помощью JavaScript.

Итак, пользователь из Нью-Йорка увидит:

12 декабря 2009 г. 18:00

Пока пользователь из Калифорнии увидит:

12 декабря 2009 г. 15:00

Есть предложения?

Ответы [ 3 ]

6 голосов
/ 03 декабря 2009

Вы можете использовать Date.getTimeZoneOffset () , чтобы получить локальное смещение от GMT.

var date = new Date();
var offset = date.getTimezoneOffset();

Оттуда это SMOP. Используя объект Javascript Date , вы можете вызвать date.toDateString, чтобы получить удобочитаемую дату. Если вам это нужно на стороне сервера, пусть Javascript отправит смещение на ваш сервер с помощью GET или POST.

Форматирование даты - это другая история. Javascript не предоставляет много встроенного. Вы можете взломать его самостоятельно, но в этом и заключается ошибка и безумие. Форматирование даты - это то, что должна обеспечить любая хорошая библиотека Javascript. Например, JQuery имеет Datepicker.formatDate .

2 голосов
/ 03 декабря 2009

Вот как вы могли бы сделать это с помощью замечательного «прогрессивного улучшения»:

Выведите дату, когда вы хотите, чтобы она появилась, но обязательно укажите ее часовой пояс (здесь я использую GMT, но вы можете использовать UTC и т. Д.). Затем замените его местным временем загрузки (автоматически обрабатывается JavaScript, если указан исходный часовой пояс).

<div id="timestamp">December 12, 2009 6:00 pm GMT</div>
<script type="text/javascript">
    var timestamp = document.getElementById('timestamp'),
        t         = new Date(timestamp.innerHTML),
        hours     = t.getHours(), 
        min       = t.getMinutes() + '', 
        pm        = false,
        months    = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

    if(hours > 11){
       hours = hours - 12;
       pm = true;
    }

    if(hours == 0) hours = 12;
    if(min.length == 1) min = '0' + min;

    timestamp.innerHTML = months[t.getMonth()] + ' ' + t.getDate() + ', ' + t.getFullYear() + ' ' + hours + ':' + min + ' ' + (pm ? 'pm' : 'am');
</script>
0 голосов
/ 09 декабря 2009

Мы используем библиотеку ExtJS , которая имеет функциональные возможности относительно даты и времени, которые могут вам очень помочь. На самом деле, на моем Mozilla Firefox он отображает все даты и время в соответствии с часовым поясом браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...