NisumCL / proyecto_calendario

0 stars 0 forks source link

DT - Refactorización comparación de fechas #14

Closed aursog closed 2 years ago

aursog commented 2 years ago

Actualmente la comparación de las fechas en la rama main es:

const compararFecha = (fecha1, fecha2, cumple) => {
    mesCumple = parseInt(cumple[1]);
    diaCumple = parseInt(cumple[2]);
    if (
        mesCumple == fecha1.getMonth() + 1 &&
        mesCumple == fecha2.getMonth() + 1
    ) {
        if (diaCumple >= fecha1.getDate() && diaCumple <= fecha2.getDate()) {
            return true;
        }
    } else if (mesCumple === fecha1.getMonth() + 1) {
        if (diaCumple >= fecha1.getDate()) {
            return true;
        }
    } else if (mesCumple === fecha2.getMonth() + 1) {
        if (diaCumple <= fecha2.getDate()) {
            return true;
        }
    } else if (
        mesCumple > fecha1.getMonth() + 1 &&
        mesCumple < fecha2.getMonth() + 1
    ) {
        return true;
    }
    return false;
};

Este código podría ser refactorizado tomando el día del año o llevando las fechas a año actual y haciendo un diff de ambas fechas.

KiraElric commented 2 years ago
//Función para transformat el input de fecha a tipo fecha con base el año actual
function convertToDate(inputDateString) {
  const arrayInputDateString = inputDateString.split('/');
  const date = new Date();
  date.setFullYear(
    date.getFullYear(),
    parseInt(arrayInputDateString[1], 10) - 1,
    parseInt(arrayInputDateString[2], 10)
  );
  date.setHours(0, 0, 0, 0);
  return date;
}

//Funcion para convertir la fecha de cumpleaños a una fecha con base el año actual.
function matchThisYear(dateString) {
  const arrayDateString = dateString.split('-');
  const date = new Date();
  date.setFullYear(
    date.getFullYear(),
    parseInt(arrayDateString[1], 10) - 1,
    parseInt(arrayDateString[2], 10)
  );
  date.setHours(0, 0, 0, 0);
  return date;
}

//Modificacion en la funcion para que la fecha de cumpleaños desde el archivo se guarda en el objeto como tipo fecha
function dataToObject(data) {
  const dataFormated = data
    .split('\n')
    .splice(1)
    .map(row => {
      if (row === '') {
        throw new Error('Existe una fila sin información. Favor eliminarla del archivo.');
      }
      const workerData = row.split(',');
      const worker = {
        name: workerData[1].replace('"', '').trim(),
        lastname: workerData[0].replace('"', ''),
        email: workerData[2],
        birthday: matchThisYear(workerData[3]),
        company: workerData[4],
      };
      return worker;
    });
  return dataFormated;
}

Se adicionan estas dos funciones en el archivo de converter.js, para llevar la fecha a año actual. Adicionalmente se define ya al momento de crear el objeto que la fecha de cumpleaños se guarde en el objeto como tipo fecha.

KiraElric commented 2 years ago
//Funcion que compara cual de las dos fechas es menor.
function biggerDate(firstDate, secondDate) {
  const differenceDate = secondDate - firstDate;
  return differenceDate >= 0;
}

//Funcion que filtra los cumpleaños segun las fechas establecidas
function filteredBirthdays(firstDate, secondDate, workersData) {
  return workersData.filter(
    worker => worker.birthday >= firstDate && worker.birthday <= secondDate
  );
}

La funcion al final la dividimos en estas cuatro minifunciones, una para transformar los datos a objetos fechas, tanto el input como la que viene del archivo, para traer las fechas a este año, otra para comparar que fecha es menor y la ultima para filtrar los cumpleaños segun las fechas