Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

208
Views
Detectar cuándo la fecha y la hora actuales ahora están en Javascript

Estoy tratando de encontrar si la hora y la fecha actuales son iguales a una fecha que proviene de una API.

Los datos de la API tienen el siguiente formato: 2021-01-02T08:00:00+01:00

El código que tengo actualmente es:

 if (new Date() === new Date(apiData) { alert('its the current time accurate to seconds') }

El problema es que no creo que esto tenga en cuenta las diferentes zonas horarias, solo quiero ejecutar el código si la hora es exactamente la de la API, sin importar de dónde venga el cliente.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

La marca de tiempo 2021-01-02T08:00:00+01:00 representa un momento único en el tiempo. Si se analiza de acuerdo con ECMA-262, producirá un valor de tiempo que es un desplazamiento de milisegundos desde la época de ECMAScript: 1970-01-01T00:00:00Z.

El valor de tiempo generado es independiente de la configuración del sistema host, es decir, el desplazamiento del host no tiene efecto. Asi que:

 Date.parse('2021-01-02T08:00:00+01:00');

producirá exactamente el mismo valor (1609570800000) en cada implementación consistente con ECMA-262.

Si se pasa al constructor de Fecha, la marca de tiempo se analizará exactamente de la misma manera, con el valor de tiempo que se usa para una instancia de Fecha tal que:

 let ts = '2021-01-02T08:00:00+01:00'; Date.parse(ts) == new Date(ts).getTime();

Como se menciona en los comentarios, los valores de tiempo de ECMAScript tienen una precisión de milisegundos, por lo que la posibilidad de que lo anterior sea verdadero es extremadamente pequeña. Reducir la precisión a un segundo (por ejemplo, redondeando o truncando los segundos decimales) no ayudará mucho.

Si desea ejecutar algún código en el momento indicado por la marca de tiempo, lo mejor es calcular el tiempo restante y, si es en el futuro, establezca un tiempo de espera, algo como:

 let timeLeft = Date.parse(timestamp) - Date.now(); if (timeLeft >= 0) { setTimeout(doStuff, timeLeft); }

P.ej

 /* Create timestamp in future with specified offset * @param {string} timeAhead - time in future in H[:m[:s[.sss]]] format * @param {string} offset - offset as [-]H[:mm] * @returns {string} ISO 8601 formatted timestamp with offset */ function getFutureTimestamp(timeAhead, offset) { let pad = n => ('0' + n).slice(-2); let [h, m, s, ms] = timeAhead.split(/\D/); let timems = (h||0)*3.6e6 + (m||0)*6e4 + (s||0)*1e3 + (ms||0)*1; let oSign = /^-/.test(offset)? -1 : +1; let [oH, om] = offset.match(/\d+/g) || []; let oms = oSign * (oH*3.6e6 + (om||0)*6e4); let d = new Date(Date.now() + oms + timems); return d.toISOString().replace('Z', `${oSign < 0? '-':'+'}${pad(oH)}:${pad(om||0)}`); } // timestamp for 5 seconds from now with offset +1 let ts = getFutureTimestamp('0:0:5','1'); // Calculate ms from now to ts let delay = Date.parse(ts) - Date.now(); console.log('Run at ' + ts); // Show timestamp after lag if (delay >= 0) { setTimeout(()=>console.log('done: ' + new Date().toISOString()), delay); }

Tenga en cuenta que en lo anterior, la primera marca de tiempo mostrada será +1, la segunda +0, por lo que tendrán 1 hora de diferencia.

Los tiempos de espera no se ejecutan necesariamente después del tiempo especificado. Sin embargo, lo anterior parece ser unos pocos milisegundos. Hasta donde yo sé, la precisión del tiempo de espera (basado en el reloj del sistema) no depende de la duración de la demora, sino de cuán ocupado está el sistema cuando transcurre.

about 4 years ago · Juan Pablo Isaza Report

0

Usa este código

 if (new Date().getTime() === new Date(apiData).getTime()) { alert('its the current time accurate to seconds') }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!