zona variable obtener manejo horaria hora fechas fecha actual javascript jquery datetime timezone utc

javascript - variable - typescript fecha actual



Convertir la hora de la fecha UTC a la hora local de la fecha (23)

Use esto para UTC y hora local y viceversa.

//Covert datetime by GMT offset //If toUTC is true then return UTC time other wise return local time function convertLocalDateToUTCDate(date, toUTC) { date = new Date(date); //Local time converted to UTC console.log("Time: " + date); var localOffset = date.getTimezoneOffset() * 60000; var localTime = date.getTime(); if (toUTC) { date = localTime + localOffset; } else { date = localTime - localOffset; } date = new Date(date); console.log("Converted time: " + date); return date; }

Del servidor obtengo una variable de fecha y hora en este formato: 6/29/2011 4:52:48 PM y está en hora UTC. Quiero convertirlo al tiempo del navegador del usuario actual usando JavaScript.

¿Cómo se puede hacer esto usando JavaScript o jQuery?


A la respuesta de Matt le falta el hecho de que el horario de verano podría ser diferente entre Date () y la fecha que necesita convertir. Aquí está mi solución:

function ConvertUTCTimeToLocalTime(UTCDateString) { var convertdLocalTime = new Date(UTCDateString); var hourOffset = convertdLocalTime.getTimezoneOffset() / 60; convertdLocalTime.setHours( convertdLocalTime.getHours() + hourOffset ); return convertdLocalTime; }

Y los resultados en el depurador:

UTCDateString: "2014-02-26T00:00:00" convertdLocalTime: Wed Feb 26 2014 00:00:00 GMT-0800 (Pacific Standard Time)


A mi lo mas simple me parecio usar

datetime.setUTCHours(datetime.getHours()); datetime.setUTCMinutes(datetime.getMinutes());

(Pensé que la primera línea podría ser suficiente, pero hay zonas horarias que están apagadas en fracciones de horas)


Agregue ''UTC'' a la cadena antes de convertirla en una fecha en javascript:

var date = new Date(''6/29/2011 4:52:48 PM UTC''); date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"


Agregue la zona horaria al final, en este caso ''UTC'':

theDate = new Date( Date.parse(''6/29/2011 4:52:48 PM UTC''));

después de eso, use las familias de funciones toLocale () * para mostrar la fecha en el lugar correcto

theDate.toLocaleString(); // "6/29/2011, 9:52:48 AM" theDate.toLocaleTimeString(); // "9:52:48 AM" theDate.toLocaleDateString(); // "6/29/2011"


Debe obtener el desplazamiento (UTC) (en minutos) del cliente:

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

Y luego agregue o reste el correspondiente al tiempo que obtiene del servidor.

Espero que esto ayude.


Después de probar algunos otros publicados aquí sin buenos resultados, esto pareció funcionar para mí:

convertUTCDateToLocalDate: function (date) { return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds())); }

Y esto funciona para ir en sentido contrario, desde Fecha local a UTC:

convertLocalDatetoUTCDate: function(date){ return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); }


En Angular usé la respuesta de Ben de esta manera:

$scope.convert = function (thedate) { var tempstr = thedate.toString(); var newstr = tempstr.toString().replace(/GMT.*/g, ""); newstr = newstr + " UTC"; return new Date(newstr); };

Edición: Angular 1.3.0 agregó soporte UTC al filtro de fecha, no lo he usado todavía, pero debería ser más fácil, aquí está el formato:

{{ date_expression | date : format : timezone}}

Angular 1.4.3 Fecha API


En caso de que no le moment.js usar moment.js y su tiempo esté en UTC, use lo siguiente:

moment.utc(''6/29/2011 4:52:48 PM'').toDate();

Si su tiempo no está en utc, pero si conoce alguna otra configuración regional, utilice lo siguiente:

moment(''6/29/2011 4:52:48 PM'', ''MM-DD-YYYY'', ''fr'').toDate();

Si su tiempo ya está en local, use lo siguiente:

moment(''6/29/2011 4:52:48 PM'', ''MM-DD-YYYY'');


En mi punto de vista, los servidores siempre deben, en el caso general, devolver una fecha y hora en el formato ISO 8601 estandarizado .

Más información aquí:

En este caso, el servidor devolvería ''2011-06-29T16:52:48.000Z'' que se ''2011-06-29T16:52:48.000Z'' directamente al objeto JS Date.

var utcDate = ''2011-06-29T16:52:48.000Z''; // ISO-8601 formatted date returned from server var localDate = new Date(utcDate);

La fecha localDate estará en la hora local correcta, que en mi caso sería dos horas más tarde (hora DK).

Realmente no tiene que hacer todo este análisis, lo que complica las cosas, siempre y cuando sea coherente con el formato que se espera del servidor.


Escribí un pequeño script que toma una época UTC y lo convierte en la zona horaria del sistema cliente y lo devuelve en formato d / m / YH: i: s (como la función de fecha de PHP):

getTimezoneDate = function ( e ) { function p(s) { return (s < 10) ? ''0'' + s : s; } var t = new Date(0); t.setUTCSeconds(e); var d = p(t.getDate()), m = p(t.getMonth()+1), Y = p(t.getFullYear()), H = p(t.getHours()), i = p(t.getMinutes()), s = p(t.getSeconds()); d = [d, m, Y].join(''/'') + '' '' + [H, i, s].join('':''); return d; };


Esta es una solución simplificada basada en la respuesta de Adorjan Princ:

function convertUTCDateToLocalDate(date) { var newDate = new Date(date); newDate.setMinutes(date.getMinutes() - date.getTimezoneOffset()); return newDate; }

Uso:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));


Esta es una solución universal:

function convertUTCDateToLocalDate(date) { var newDate = new Date(date.getTime()+date.getTimezoneOffset()*60*1000); var offset = date.getTimezoneOffset() / 60; var hours = date.getHours(); newDate.setHours(hours - offset); return newDate; }

Uso:

var date = convertUTCDateToLocalDate(new Date(date_string_you_received));

Muestra la fecha según la configuración local del cliente:

date.toLocaleString();


Esto funciona para mí:

function convertUTCDateToLocalDate(date) { var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000); return newDate; }


Para mí las soluciones anteriores no funcionaron.

Con IE, la conversión de fecha y hora UTC a local es un poco difícil. Para mí, la fecha y hora de la API web es ''2018-02-15T05:37:26.007'' y quería convertir según la zona horaria local, así que utilicé el código de abajo en JavaScript.

var createdDateTime = new Date(''2018-02-15T05:37:26.007'' + ''Z'');


Pon esta función en tu cabeza:

<script type="text/javascript"> function localize(t) { var d=new Date(t+" UTC"); document.write(d.toString()); } </script>

Luego genere lo siguiente para cada fecha en el cuerpo de su página:

<script type="text/javascript">localize("6/29/2011 4:52:48 PM");</script>

Para eliminar el GMT y la zona horaria, cambie la siguiente línea:

document.write(d.toString().replace(/GMT.*/g,""));


Puede usar momentjs , moment(date).format() siempre dará resultado en la fecha local .

Bonificación , puedes formatear de la forma que quieras. Por ejemplo.

moment().format(''MMMM Do YYYY, h:mm:ss a''); // September 14th 2018, 12:51:03 pm moment().format(''dddd''); // Friday moment().format("MMM Do YY");

Para más detalles puedes consultar el sitio web de Moment js.


Respondiendo esto si alguien quiere una función que muestre la hora convertida en un elemento de id específico y aplique la cadena de formato de fecha yyyy-mm-dd aquí date1 es string e ids es el id del elemento que la hora va a mostrar.

function convertUTCDateToLocalDate(date1, ids) { var newDate = new Date(); var ary = date1.split(" "); var ary2 = ary[0].split("-"); var ary1 = ary[1].split(":"); var month_short = Array(''Jan'', ''Feb'', ''Mar'', ''Apr'', ''May'', ''Jun'', ''Jul'', ''Aug'', ''Sep'', ''Oct'', ''Nov'', ''Dec''); newDate.setUTCHours(parseInt(ary1[0])); newDate.setUTCMinutes(ary1[1]); newDate.setUTCSeconds(ary1[2]); newDate.setUTCFullYear(ary2[0]); newDate.setUTCMonth(ary2[1]); newDate.setUTCDate(ary2[2]); ids = document.getElementById(ids); ids.innerHTML = " " + newDate.getDate() + "-" + month_short[newDate.getMonth() - 1] + "-" + newDate.getFullYear() + " " + newDate.getHours() + ":" + newDate.getMinutes() + ":" + newDate.getSeconds(); }

Sé que esa respuesta ya ha sido aceptada, pero llego aquí por Google y resolví con la inspiración de una respuesta aceptada, así que solo quería compartirla si alguien la necesita.


Sobre la base de la respuesta de @digitalbath, aquí hay una pequeña función para capturar la marca de hora UTC y mostrar la hora local en un elemento DOM dado (usando jQuery para esta última parte):

https://jsfiddle.net/moriz/6ktb4sv8/1/

<div id="eventTimestamp" class="timeStamp"> </div> <script type="text/javascript"> // Convert UTC timestamp to local time and display in specified DOM element function convertAndDisplayUTCtime(date,hour,minutes,elementID) { var eventDate = new Date(''''+date+'' ''+hour+'':''+minutes+'':00 UTC''); eventDate.toString(); $(''#''+elementID).html(eventDate); } convertAndDisplayUTCtime(''06/03/2015'',16,32,''eventTimestamp''); </script>


Una cadena de fecha JSON (serializada en C #) se parece a "2015-10-13T18: 58: 17".

En angular, (siguiendo a Hulvej) haz un filtro de fecha localdate :

myFilters.filter(''localdate'', function () { return function(input) { var date = new Date(input + ''.000Z''); return date; }; })

Luego, muestra la hora local como:

{{order.createDate | localdate | date : ''MMM d, y h:mm a'' }}


Usando el YYYY-MM-DD hh:mm:ss :

var date = new Date(''2011-06-29T16:52:48+00:00''); date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"

Para realizar la conversión del YYYY-MM-DD hh:mm:ss , asegúrese de que su fecha siga el http://www.w3.org/TR/NOTE-datetime .

Year: YYYY (eg 1997) Year and month: YYYY-MM (eg 1997-07) Complete date: YYYY-MM-DD (eg 1997-07-16) Complete date plus hours and minutes: YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00) Complete date plus hours, minutes and seconds: YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00) Complete date plus hours, minutes, seconds and a decimal fraction of a second YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00) where: YYYY = four-digit year MM = two-digit month (01=January, etc.) DD = two-digit day of month (01 through 31) hh = two digits of hour (00 through 23) (am/pm NOT allowed) mm = two digits of minute (00 through 59) ss = two digits of second (00 through 59) s = one or more digits representing a decimal fraction of a second TZD = time zone designator (Z or +hh:mm or -hh:mm)

Cosas importantes a tener en cuenta

  1. Debe separar la fecha y la hora con una T , un espacio no funcionará en algunos navegadores
  2. Debe configurar la zona horaria con este formato +hh:mm , usar una cadena para una zona horaria (por ejemplo: ''UTC'') no funcionará en muchos navegadores. +hh:mm representa el desplazamiento desde la zona horaria UTC.

@Adorojan''s respuesta @Adorojan''s es casi correcta. Pero la adición de la compensación no es correcta, ya que el valor de la compensación será negativo si la fecha del navegador es anterior a la GMT y viceversa. A continuación se muestra la solución con la que vine y funciona perfectamente bien para mí:

// Input time in UTC var inputInUtc = "6/29/2011 4:52:48"; var dateInUtc = new Date(Date.parse(inputInUtc+" UTC")); //Print date in UTC time document.write("Date in UTC : " + dateInUtc.toISOString()+"<br>"); var dateInLocalTz = convertUtcToLocalTz(dateInUtc); //Print date in local time document.write("Date in Local : " + dateInLocalTz.toISOString()); function convertUtcToLocalTz(dateInUtc) { //Convert to local timezone return new Date(dateInUtc.getTime() - dateInUtc.getTimezoneOffset()*60*1000); }


function getUTC(str) { var arr = str.split(/[- :]/); var utc = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]); utc.setTime(utc.getTime() - utc.getTimezoneOffset()*60*1000) return utc; }

Para otras personas que visiten: use esta función para obtener un objeto de fecha local de una cadena UTC, debe hacerse cargo del horario de verano y funcionará en IE, iPhone, etc.

Dividimos la cadena (ya que el análisis de fecha JS no es compatible con algunos navegadores) Obtenemos la diferencia de UTC y la restamos de la hora UTC, lo que nos da la hora local. Dado que el desplazamiento devuelto se calcula con DST (corríjame si estoy equivocado), así se establecerá ese tiempo en la variable "utc" Finalmente devuelve el objeto fecha.