Обработка дат (форматирование и часовые пояса) в JavaScript - PullRequest
0 голосов
/ 02 августа 2011

Случай использования: я получаю дату в миллис (из эпохи) через вызов ajax, который теперь нужно интерпретировать в javascript. Это соответствует некоторому моменту времени в UTC.

Теперь мне нужно отобразить эту дату в PST, поскольку это единственный релевантный часовой пояс для пользователей независимо от того, откуда они открывают страницу. Кроме того, мне нужно показать его в другом формате, например «гггг-мм-дд ЧЧ: мм», а не в строке локали по умолчанию.

Может кто-нибудь сказать, пожалуйста, как я могу это сделать.

Ответы [ 5 ]

2 голосов
/ 02 августа 2011

Создайте новую дату, используя значение в миллисекундах UNIX плюс смещение в PST, затем создайте отформатированную строку, используя серию вызовов getUTC.

1 голос
/ 22 июня 2012

Moment.js - довольно приятная библиотека для подобных вещей.

0 голосов
/ 02 августа 2011

В JavaScript теперь есть способ установить часовой пояс, в котором вы хотите что-то отобразить. Я использовал Flot для библиотеки для построения графиков, и их предлагаемое решение - использовать методы getUTC при отображении дат. Это означает, что ваш серверный код не может отправлять стандартные миллисекунды из эпохи (так как это будет отображать время по Гринвичу), но небольшая настройка на сервере позволит корректно отображать ваши даты на клиенте.

Чтобы прочитать о проблеме, см. http://flot.googlecode.com/svn/trunk/API.txt, и найдите заголовок «Данные временных рядов»

0 голосов
/ 02 августа 2011

Используйте объект Date: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

Объект Date в Javascript работает с миллисекундами, а не секундами, поэтому вам придется умножить метку времени UNIX на 1000:

var myDate = new Date(unix_timestamp * 1000);

Затем вы можете использовать локальный объект Date, чтобы делать все, что вам захочется:

var output = myDate .getHours() + ':';
output += myDate .getMinutes() + ':';
output += myDate .getSeconds();
alert(output);

РЕДАКТИРОВАТЬ Ах, пропустил часть об использовании PST всегда, независимо от локали. unix_timesamp снова - это отметка времени эпохи / UNIX, которую вы получаете с сервера:

Попробуйте здесь: http://jsfiddle.net/46PYZ/

  // set to the UTC offset for the target timezone, PST = UTC - 8
    var target_offset = -8;

    // create a Date object
    var myDate = new Date();

    // add local time zone offset to get UTC time in msec
    var utc_milliseconds = (unix_timesamp * 1000) + (myDate .getTimezoneOffset() * 60000);

    // set the time using the calculated UTC timestamp
    myDate.setTime(utc_milliseconds + (3600000 * target_offset));

    // now build the yyyy-mm-dd HH:mm format
    var output = myDate.getFullYear() + '-';
    var month = myDate.getMonth() + 1;
    output += (month < 10 ? '0' + month : month) + '-';
    output += myDate.getDate() + ' ';
    var hours = myDate.getHours() + 1;
    output += (hours < 10 ? '0' + hours : hours) + ':';
    var minutes= myDate.getMinutes() + 1;
    output += (minutes< 10 ? '0' + minutes : minutes);
0 голосов
/ 02 августа 2011

Я полагаю, что часовые пояса определяются настройкой часового пояса пользователя при использовании новой функции Date ().

var myDateTime = 1312312732923; 
var myDate = new Date(myDateTime); 

var myFormattedDate = myDate.getFullYear() + "-" + (myDate.getMonth()+1) + "-" + myDate.getDay();

http://www.w3schools.com/jsref/jsref_obj_date.asp

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