Saltar al contenido

Conversión del número de serie de fecha de Excel a fecha usando Javascript

Ten en cuenta que en las ciencias cualquier problema suele tener diferentes resoluciones, pero nosotros aquí enseñaremos la mejor y más óptimo.

Solución:

Prueba esto:

function ExcelDateToJSDate(serial) 
   var utc_days  = Math.floor(serial - 25569);
   var utc_value = utc_days * 86400;                                        
   var date_info = new Date(utc_value * 1000);

   var fractional_day = serial - Math.floor(serial) + 0.0000001;

   var total_seconds = Math.floor(86400 * fractional_day);

   var seconds = total_seconds % 60;

   total_seconds -= seconds;

   var hours = Math.floor(total_seconds / (60 * 60));
   var minutes = Math.floor(total_seconds / 60) % 60;

   return new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);

Hecho a medida para ti 🙂

Hice una sola línea para ti:

function ExcelDateToJSDate(date) 
  return new Date(Math.round((date - 25569)*86400*1000));

No es necesario hacer ningún cálculo para reducirlo a una línea.

// serialDate is whole number of days since Dec 30, 1899
// offsetUTC is -(24 - your timezone offset)
function SerialDateToJSDate(serialDate, offsetUTC) 
  return new Date(Date.UTC(0, 0, serialDate, offsetUTC));

Estoy en PST, que es UTC-0700, así que usé offsetUTC = -17 para obtener 00:00 como hora (24 – 7 = 17).

Esto también es útil si está leyendo fechas de Google Sheets en formato de serie. La documentación sugiere que la serie puede tener un decimal para expresar parte de un día:

Indica a los campos de fecha, hora, fecha y hora y duración que se generen como duplicados en formato de “número de serie”, como lo populariza Lotus 1-2-3. La parte del número entero del valor (a la izquierda del decimal) cuenta los días desde el 30 de diciembre de 1899. La parte fraccionaria (a la derecha del decimal) cuenta el tiempo como una fracción del día. Por ejemplo, el 1 de enero de 1900 al mediodía sería 2.5, 2 porque es 2 días después del 30 de diciembre de 1899 y .5 porque el mediodía es medio día. El 1 de febrero de 1900 a las 3 p.m. sería 33.625. Esto trata correctamente el año 1900 como no un año bisiesto.

Por lo tanto, si desea admitir un número de serie con un decimal, deberá separarlo.

function SerialDateToJSDate(serialDate) 
  var days = Math.floor(serialDate);
  var hours = Math.floor((serialDate % 1) * 24);
  var minutes = Math.floor((((serialDate % 1) * 24) - hours) * 60)
  return new Date(Date.UTC(0, 0, serialDate, hours-17, minutes));

Reseñas y calificaciones del artículo

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *