obtener mexico horario hora fecha cuál argentina actual javascript

javascript - mexico - Obteniendo la hora mundial GMT actual



obtener fecha y hora actual javascript (12)

¿Cómo puedo obtener la hora actual? (en JavaScript)

No es el momento de su computadora como:

now = new Date; now_string = addZero(now.getHours()) + ":" + addZero(now.getMinutes()) + ":" + addZero(now.getSeconds());

Pero el tiempo real del mundo exacto?

¿Necesito conectarme a un servidor (probablemente sí, cuál? Y ¿cómo puedo recuperar tiempo de él?)

Todas las búsquedas que hago desde google devuelven la (new Date).getHours() .

Editar:

Quiero evitar mostrar una hora incorrecta si el usuario tiene una hora incorrecta en su computadora.


¿Por qué no envías el tiempo con cada página? Por ejemplo, en algún lugar del html:

<span id="time" style="display:none;"> 2009-03-03T23:32:12 </span>

Entonces podría ejecutar un Javascript mientras el sitio carga e interpreta la fecha. Esto reduciría la cantidad de trabajo que la red tiene que hacer. Puede almacenar la hora local correspondiente y calcular el desplazamiento cada vez que lo necesite.


Como dijeron el Sr. Shiny y New , necesitas un servidor en algún lugar con la hora correcta. Puede ser el servidor donde se encuentra el sitio o algún otro servidor que envíe la hora correcta en un formato que pueda leer.

Si desea utilizar la fecha varias veces en su página, con uno o más segundos de diferencia, es probable que no desee obtener el tiempo del servidor cada vez, sino almacenar la diferencia en caché y usar el reloj de los clientes. Si ese es el caso, aquí hay una de muchas soluciones:

var MyDate = new function() { this.offset = 0; this.calibrate = function (UTC_msec) { //Ignore if not a finite number if (!isFinite(UTC_msec)) return; // Calculate the difference between client and provided time this.offset = UTC_msec - new Date().valueOf(); //If the difference is less than 60 sec, use the clients clock as is. if (Math.abs(this.offset) < 60000) this.offset = 0; } this.now = function () { var time = new Date(); time.setTime(this.offset + time.getTime()); return time; } }();

Inclúyalo en su página y permita que su secuencia de comandos del lado del servidor produzca una fila como:

MyDate.calibrate(1233189138181);

donde el número es la hora actual en milisegundos desde el 1 de enero de 1970. También puede usar su marco de trabajo favorito para AJAX y hacer que llame a la función anterior. O puede usar la solución que JimmyP sugirió. He reescrito la solución de JimmyPs para incluirla en mi solución. Simplemente copia y pega lo siguiente dentro de la función de arriba:

this.calibrate_json = function (data) { if (typeof data === "object") { this.calibrate (new Date(data.datetime).valueOf() ); } else { var script = document.createElement("script"); script.type="text/javascript"; script.src=(data||"http://json-time.appspot.com/time.json?tz=UTC") + "&callback=MyDate.calibrate_json"; document.getElementsByTagName(''head'')[0].appendChild(script); } } this.calibrate_json(); //request calibration with json

Tenga en cuenta que si cambia el nombre de la función de MyDate , debe actualizar la devolución de llamada en this.calibrate_json en la línea script.src .

Explicación:

Mydate.offset es el desplazamiento actual entre la hora del servidor y el reloj de los clientes en milisegundos.

Mydate.calibrate (x); es una función que establece un nuevo desplazamiento. Espera que la entrada sea la hora actual en milisegundos desde el 1 de enero de 1970. Si la diferencia entre el servidor y el reloj del cliente es inferior a 60 segundos, se usará el reloj del cliente.

Mydate.now () es una función que devuelve un objeto de fecha que tiene la hora calibrada actual.

Mydate.calibrate_json (data) es una función que toma una url a un recurso que devuelve una respuesta de fecha y hora, o un objeto con la hora actual (utilizada como una devolución de llamada). Si no se proporciona nada, utilizará una url predeterminada para obtener el tiempo. La url debe tener un signo de interrogación "?" en eso.

Ejemplo simple de cómo actualizar un elemento con la hora actual cada segundo:

setInterval( function () { var element = document.getElementById("time"); if (!element) return; function lz(v) { return v < 10 ? "0" + v : v; } var time = MyDate.now(); element.innerHTML = time.getFullYear() + "-" + lz(time.getMonth() + 1) + "-" + lz(time.getDate()) + " " + lz(time.getHours()) + ":" + lz(time.getMinutes()) + ":" + lz(time.getSeconds()) ; },1000);


Dado que el servicio relacionado con la respuesta de James parece no funcionar más, encontré otra API de buen descanso que se puede utilizar para este fin, y funciona bien. La fuente es este sitio: timeapi y el código que puede usar es simplemente esto (usando la biblioteca jQuery y la devolución de llamada jsonp provistas por la API):

$.getJSON("http://www.timeapi.org/utc/now.json?callback=?",function(json){ //console.log(json) alert(json.dateString); });

Con esto tendrás la fecha y hora en el formulario como

September 02, 2016 09:59:42 GMT+0100

Si quieres manipularlo en javascript, para tener las horas, simplemente transfórmalo en un objeto Date como este:

new Date(json.dateString)

Entonces, por ejemplo, puedes escribir así:

$.getJSON("http://www.timeapi.org/utc/now.json?callback=?",function(json){ var now = new Date(json.dateString); var hours = now.toLocaleTimeString(); alert(hours) });

de esta manera tendrá la hora local exacta en horas.


En primer lugar, para obtener la hora GMT precisa, necesita una fuente en la que confíe. Esto significa algún servidor en alguna parte. Javascript generalmente solo puede hacer llamadas HTTP, y solo al servidor que aloja la página en cuestión (la misma política de origen). Por lo tanto, ese servidor debe ser su fuente para la hora GMT.

Configuraría su servidor web para usar NTP para sincronizar su reloj con GMT, y haría que el servidor web le diga al script qué hora es, escribiendo una variable en la página. O bien haga y XmlHttpRequest vuelva al servidor cuando necesite saber la hora. La desventaja es que esto será impreciso debido a la latencia involucrada: el servidor determina la hora, la escribe en la respuesta, la respuesta viaja por la red y el javascript se ejecuta siempre que la CPU del cliente le da un intervalo de tiempo, etc. enlace lento puede esperar segundos de retraso si la página es grande. Es posible que pueda ahorrar algo de tiempo determinando qué tan lejos de GMT está el reloj del usuario, y simplemente ajustando todos los cálculos de tiempo por ese desplazamiento. Por supuesto, si el reloj del usuario es lento o rápido (no solo tarde o temprano) o si el usuario cambia la hora en su PC, entonces su desplazamiento se agotará.

También tenga en cuenta que el cliente puede cambiar los datos, así que no confíe en las marcas de tiempo que le envían.

Editar : La respuesta de JimmyP es muy simple y fácil de usar: use Javascript para agregar un elemento <script> que llame a una url como http://json-time.appspot.com/time.json?tz=GMT . Esto es más fácil que hacer esto usted mismo porque el servidor json-time.appspot.com funciona como una fuente de tiempo GMT, y proporciona estos datos de una manera que le permite trabajar con la misma política de origen. Lo recomendaría para sitios simples. Sin embargo, tiene un inconveniente importante: el sitio json-time.appspot.com puede ejecutar código arbitrario en las páginas de su usuario. Esto significa que si los operadores de ese sitio quieren perfilar a sus usuarios o secuestrar sus datos, pueden hacerlo trivialmente. Incluso si confías en los operadores, también debes confiar en que no han sido pirateados o comprometidos. Para un sitio de negocios o cualquier sitio con problemas de alta confiabilidad, le recomiendo que aloje la solución de tiempo usted mismo.

Editar 2 : la respuesta de JimmyP tiene un comentario que sugiere que la aplicación json-time tiene algunas limitaciones en cuanto a la cantidad de solicitudes que puede admitir. Esto significa que si necesita confiabilidad, debe alojar el servidor de tiempo usted mismo. Sin embargo, debería ser bastante fácil agregar una página en su servidor que responda con el mismo formato de datos. Básicamente, su servidor toma una consulta como

http://json-time.appspot.com/time.json?tz=America/Chicago&callback=foo

y devuelve una cadena como

foo({ "tz": "America//Chicago", "hour": 15, "datetime": "Thu, 09 Apr 2009 15:07:01 -0500", "second": 1, "error": false, "minute": 7 })

Tenga en cuenta el foo() que envuelve el objeto JSON; esto corresponde a la devolución de llamada = foo en la consulta. Esto significa que cuando el script se carga en la página llamará a su función foo, que puede hacer lo que quiera con el tiempo. La programación del lado del servidor para este ejemplo es una pregunta separada.


Hemos utilizado una API de EarthTools con mucho éxito:

EarthTools

El servicio devuelve XML con información tal como el GMT actual y los offsets de zona horaria (cuando se proporciona latitud y longitud). Usamos un WebClient junto con un XMLDocument en el back-end de VB de nuestra página ASP.NET para leer e interpretar el XML.


La solución más sencilla de IMO consiste en utilizar AWS Lambda (o Google Serverless) y adjuntarla a través de API Gateway, lo que le proporciona un servidor horario sin necesidad de administrar ninguna infraestructura. Mi código Lambda:

import datetime import json def lambda_handler(event, context): dt = datetime.datetime.utcnow() return { ''statusCode'': 200, ''body'': json.dumps({ ''iso_time'': dt.strftime(''%Y-%m-%dT%H:%M:%SZ'') }) }



Puede usar getTimezoneOffset para obtener el desplazamiento entre la fecha local y GMT, y luego hacer los cálculos. Pero esto solo será tan preciso como el reloj del usuario.

Si desea una hora precisa, debe conectarse a un servidor NTP . Debido a la misma política de origen , no puede realizar una solicitud con JS a otro servidor que no sea el suyo. Le sugiero que cree un script del lado del servidor que se conecte al servidor NTP (en PHP, o el idioma que desee) y devuelva la fecha exacta. Luego, use una solicitud AJAX para leer esta vez.


Puede usar JSON [P] y acceder a una API de tiempo:

(El siguiente código debería funcionar perfectamente, solo lo probé ...)

function getTime(zone, success) { var url = ''http://json-time.appspot.com/time.json?tz='' + zone, ud = ''json'' + (+new Date()); window[ud]= function(o){ success && success(new Date(o.datetime)); }; document.getElementsByTagName(''head'')[0].appendChild((function(){ var s = document.createElement(''script''); s.type = ''text/javascript''; s.src = url + ''&callback='' + ud; return s; })()); } getTime(''GMT'', function(time){ // This is where you do whatever you want with the time: alert(time); });


Si su javascript se sirve desde un servidor web, puede utilizar esta sencilla función para solicitar tiempo desde este servidor. Funcionará si el servidor devuelve el encabezado Fecha en la respuesta HTTP.

function getServerTime() { var req = new XMLHttpRequest(); req.open(''GET'', document.location, false); req.send(null); return new Date(req.getResponseHeader("Date")); }

Debido al almacenamiento en caché esto puede devolver el tiempo equivocado. Para solucionar esto, puede usar una URL aleatoria:

req.open(''GET'', "/time?r=" + Math.floor(Math.random()*10000000), false);


Tu puedes hacer esto en PHP

<?php $json = file_get_contents( "http://json-time.appspot.com/time.json?tz=GMT" ); $obj = json_decode($json); $timenow= $obj->{''datetime''}; $hournow= $obj->{''hour''}; $minutenow= $obj->{''minute''}; $secondnow= $obj->{''second''}; ?>

$timenow contiene su fecha y hora completa: "lun, 05 mar 2012 01:57:51 +0000", $hournow : "1" $minutenow : "57".


Una pequeña adición a las respuestas de Mr. Shiny y New and James

Aquí hay un script PHP que puedes colocar en tu propio servidor y usar en vez de json-time.appspot.com

<?php header(''Content-Type: application/json''); header("Expires: Tue, 01 Jan 1990 00:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); $error = "false"; $tz = $_GET[''tz'']; if ( !in_array($tz, DateTimeZone::listIdentifiers())) { $error = ''invalid time zone''; $tz = ''UTC''; } date_default_timezone_set($tz); ?> <?php echo htmlspecialchars($_GET[''callback''], ENT_QUOTES, ''UTF-8'' ); ?>({ "tz": "<?php echo $tz ?>", "hour": <?php echo date(''G''); ?>, "datetime": "<?php echo date(DATE_RFC2822); ?>", "second": <?php echo intval(date(''s'')); ?>, "error": "<?php echo $error; ?>", "minute": <?php echo intval(date(''i'')); ?> })