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}}
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
- Debe separar la fecha y la hora con una
T
, un espacio no funcionará en algunos navegadores - 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.