datetime - servidor - obtener zona horaria javascript
¿Hay un complemento de JQuery para convertir los tiempos de datos UTC a la zona horaria del usuario local? (5)
Si tengo una etiqueta:
<span class="utctime">2010-01-01 11:30 PM</span>
Me gustaría un script o plugin jquery para convertir cada clase de tiempo de uso a la hora local del navegador del usuario actual. Preferiría encontrar esto antes de escribir uno.
CodeGrue muchas gracias por compartir esto con la comunidad.
Para aquellos que están obligados a trabajar con otras zonas horarias distintas de UTC ... puede modificar la función agregando la diferencia horaria de esta manera:
Fragmento original:
var offset = -(currentDate.getTimezoneOffset() / 60);
Fragmento modificado para trabajar con la zona horaria CEST (Desplazamiento de zona horaria: UTC + 2 horas):
var offset = -(currentDate.getTimezoneOffset() / 60 + 2);
y así.
Cuando utilicé esto, tuve que cambiar la línea.
var hours = givenDate.getHours();
a
var hours = givenDate.getUTCHours();
Al depurar esto, la línea var givenDate = new Date(tagText)
termina creando un objeto Date que está en UTC (si le da una fecha en formato RFC1123, por ejemplo ddd, dd MMM yyyy HH:mm:ss GMT
), pero cuando llama a getHours, obtiene las horas en la zona horaria local. Entonces, a menos que llames a getUTCHours, no funciona.
Así que la cosa completa es
/*
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);
Vea esta otra pregunta para saber cómo lo usé en combinación con el complemento timeago.
Ok, entonces creé uno que lo hace:
/*
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);
Uso:
<span class="utcdate">2/5/2010 10:30 PM</span>
$(''.utcdate'').localTimeFromUTC(''MM/dd/yyyy hh:mm a'');
Use la fecha de entrada para encontrar el desplazamiento de la zona horaria. Importante para los cambios de horario de verano.
(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);
Úsalo como ...
function ConvertDatesToLocalTime() {
$(''.ConvertUtcToLocal'').localTimeFromUTC(''MM/dd/yyyy hh:mm:ss a'');
}
$(document).ready(function () {
ConvertDatesToLocalTime();
});
Asigne la clase ''ConvertUtcToLocal'' a todos los elementos que requieren conversión.
$(".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);
}
})
esto también se puede usar junto con la biblioteca Date.js para mostrar la hora en la zona horaria del usuario