es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma incorporada de normalizar una duración dentro de Luxon?

Estoy migrando de Momentjs a Luxon. Permito a los usuarios elegir un número de horas que llevará una tarea. Cuando guardamos este valor, me gustaría normalizarlo. Así que si una tarea lleva 90 horas, preferiría que almacenemos 3 días y 18 horas. Almaceno la cadena de duración ISO, así que me gustaría convertir PT90H a P3DT18H… por supuesto, con cualquier valor dado.

He probado la función normalize de Luxon, pero he intentado llamarla de la siguiente manera:

const duration = Duration.fromObject({ hours: 90 });
duration.normalize().toISO();

Sin embargo, normalize parece no hacer nada con el resultado. Sigo obteniendo PT90H. ¿Existe alguna forma integrada de hacer esto con Luxon?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, existe una forma incorporada de convertir horas a días y horas utilizando Luxon. Puedes usar el método toObject para obtener la duración como un objeto, luego utilizar la división entera y el módulo para calcular la cantidad de días y las horas restantes. Aquí tienes un ejemplo:

    const duration = Duration.fromObject({ hours: 90 });
    const { days, hours } = duration.toObject();
    
    const daysInHours = days * 24;
    const remainingHours = hours % 24;
    
    const normalizedDuration = Duration.fromObject({
      days: Math.floor(hours / 24),
      hours: remainingHours,
    });
    
    console.log(normalizedDuration.toISO()); // Devuelve P3DT18H
    

    En este ejemplo, primero obtenemos la duración como un objeto utilizando toObject. Luego calculamos la cantidad de días multiplicando la propiedad days por 24 (la cantidad de horas en un día), y las horas restantes tomando el módulo de 24. Finalmente, creamos un nuevo objeto de duración con los valores normalizados utilizando Duration.fromObject y mostramos el resultado como una cadena de duración ISO.

Comments are closed.