Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
Analice y manipule fechas y horas con microsegundos

Tengo cadenas de fecha y hora con el siguiente formato: YYYY-MM-DD HH:MM:SS.SSSSSS

Por ejemplo:

 const d1 = '2022-07-03 03:45:15.679570' const d2 = '2022-07-03 03:45:15.679638'

Lo que me gustaría lograr es la capacidad de restar estas fechas y horas, por ejemplo, en el ejemplo anterior, el resultado sería:

 console.log(subtractDates(d1, d2)) // -0000-00-00 00-00-00.000068 console.log(subtractDates(d2, d1)) // 0000-00-00 00-00-00.000068

Estaba buscando diferentes bibliotecas, pero todas tienen una resolución de 0-999 ms y eso es todo.

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

La resta de fechas se vuelve ambigua cuando se restan los meses. Por ejemplo, hay varias posibilidades sobre cómo representar la diferencia entre 2022-03-31 y 2022-02-28. Si se considera que esto es una diferencia de 1 mes y 3 días, ¿qué pasa si agregamos un día a ambas fechas? ¿Es entonces la diferencia (del mismo número de días) de repente un mes exacto?

Para evitar esta ambigüedad, sugeriría expresar la diferencia en una cantidad de días (y unidades de tiempo más pequeñas) incluso cuando esa cantidad de días exceda un mes o incluso un año. Solo mantén la unidad de medida más grande al día cuando trates con duraciones .

Aquí hay un par de clases que podrían extenderse fácilmente para proporcionar más funcionalidad. La idea general es usar el sistema numérico del tipo Date nativo, pero multiplicándolo por 1000.

 class MicroDuration { constructor(us) { this.us = Math.abs(us); // Don't work with negative durations. } toString() { // dddddd hh:mm:ss.ssssss return (Math.floor(this.us / 86_400_000_000) + " " + new Date(Math.floor(this.us / 1000)).toJSON().slice(11, 23) + (this.us % 1000 + "").padStart(3, "0") ).padStart(22, "0"); } } class MicroDate { constructor(iso) { iso = iso.replace(" ", "T").replace(/\d$/, "$&Z"); this.us = Date.parse(iso) * 1000 + parseInt(iso.slice(-4)); } diff(arg) { if (!(arg instanceof MicroDate)) arg = new MicroDate(arg); return new MicroDuration(this.us - arg.us); } toString() { return new Date(Math.floor(this.us / 1000)).toJSON() .replace("Z", (this.us % 1000 + "").padStart(3, "0")) .replace("T", " "); } } // Demo const d1 = '2022-07-03 03:45:15.679570' const d2 = '2024-08-03 15:45:15.678638' const diff = new MicroDate(d1).diff(d2).toString(); console.log(diff);

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda