Есть ли плагин JQuery для преобразования времени UTC в локальный часовой пояс пользователя?
Если у меня есть тег:
<span class="utctime">2010-01-01 11:30 PM</span>
Мне нужен jquery script или подключаемый модуль, чтобы преобразовать каждый класс utctime
в текущее время локального браузера пользователя. Я бы предпочел найти это, прежде чем писать.
Ответы
Ответ 1
Хорошо, поэтому я создал тот, который делает это:
/*
Note: this requires that the JQuery-DateFormat plugin (available here) be loaded first
http://plugins.jquery.com/project/jquery-dateFormat
*/
(function ($) {
$.fn.localTimeFromUTC = function (format) {
return this.each(function () {
// get time offset from browser
var currentDate = new Date();
var offset = -(currentDate.getTimezoneOffset() / 60);
// get provided date
var tagText = $(this).html();
var givenDate = new Date(tagText);
// apply offset
var hours = givenDate.getHours();
hours += offset;
givenDate.setHours(hours);
// format the date
var localDateString = $.format.date(givenDate, format);
$(this).html(localDateString);
});
};
})(jQuery);
Использование:
<span class="utcdate">2/5/2010 10:30 PM</span>
$('.utcdate').localTimeFromUTC('MM/dd/yyyy hh:mm a');
Ответ 2
Используйте дату ввода, чтобы найти смещение часового пояса. Важно для изменений DST.
(function ($) {
$.fn.localTimeFromUTC = function (format) {
return this.each(function () {
// get provided date
var tagText = $(this).html();
var givenDate = new Date(tagText);
if(givenDate == 'NaN') return;
// get time offset from browser
var offset = -(givenDate.getTimezoneOffset() / 60);
// apply offset
var hours = givenDate.getHours();
hours += offset;
givenDate.setHours(hours);
// format the date
var localDateString = $.format.date(givenDate, format);
$(this).html(localDateString);
});
};
})(jQuery);
Используйте его как....
function ConvertDatesToLocalTime() {
$('.ConvertUtcToLocal').localTimeFromUTC('MM/dd/yyyy hh:mm:ss a');
}
$(document).ready(function () {
ConvertDatesToLocalTime();
});
Назначьте класс ConvertUtcToLocal всем элементам, требующим преобразования.
Ответ 3
$(".localdatetime").each(function () {
var datestr = $(this).text();
//alert(datestr);
if (datestr.trim() != '') {
var dateOb = (new Date(Date.parse(datestr, 'MM-dd-yyyy HH:mm'))).setTimezone("GMT").toString('dd MMM yyyy hh:mm tt');
//alert(dateOb);
$(this).text(dateOb);
}
})
это также можно использовать вместе с библиотекой Date.js для отображения времени в пользовательском часовом поясе
Ответ 4
CodeGrue благодарит вас за то, что поделился этим с сообществом.
Для тех, кто вынужден работать с другими часовыми поясами, чем UTC.. вы можете изменить функцию, добавив разницу во времени следующим образом:
Оригинальный фрагмент:
var offset = -(currentDate.getTimezoneOffset() / 60);
Фрагмент изменен для работы с часовым поясом CEST (смещение часового пояса: UTC + 2 часа):
var offset = -(currentDate.getTimezoneOffset() / 60 + 2);
и т.д.
Ответ 5
Когда я использовал это, мне пришлось изменить строку
var hours = givenDate.getHours();
to
var hours = givenDate.getUTCHours();
При отладке через это строка var givenDate = new Date(tagText)
завершает создание объекта Date, который находится в формате UTC (если вы даете ему дату в формате RFC1123, например ddd, dd MMM yyyy HH:mm:ss GMT
), но когда вы вызываете getHours, вы получаете часов в местном часовом поясе. Поэтому, если вы не вызвали getUTCHours, это не сработает.
Итак, полная вещь
/*
Note: this requires that the JQuery-DateFormat plugin be loaded first
http://plugins.jquery.com/project/jquery-dateFormat
*/
(function ($) {
$.fn.localTimeFromUTC = function (format) {
return this.each(function () {
// get time offset from browser
var currentDate = new Date();
var offset = -(currentDate.getTimezoneOffset() / 60);
// get provided date
var tagText = $(this).html();
var givenDate = new Date(tagText);
// apply offset
var hours = givenDate.getUTCHours();
hours += offset;
givenDate.setHours(hours);
// format the date
var localDateString = $.format.date(givenDate, format);
$(this).html(localDateString);
});
};
})(jQuery);
Смотрите этот другой вопрос, как я использовал его в сочетании с плагином timeago.