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.

Almacenar la hora actual y verificar si está en el rango o no en Luxon js.

Estoy utilizando Luxon y pasando diferentes zonas horarias a través del código HTML. Quiero almacenar la hora actual en una variable y verificar si la hora está dentro de un rango o no. Tengo tres horarios: uno para la hora de apertura de la oficina, la hora del almuerzo y la hora de cierre.

Por ejemplo:
Hora de apertura: de 09:15 a 12:59 pm
Hora del almuerzo: de 01:00 pm a 02:00 pm
Hora de cierre: de 02:01 pm a 4:30 pm

Cuando la hora caiga dentro de estos rangos, el estado cambiará automáticamente (Abierto, Almuerzo, Cerrado).

Solo con la hora no es suficiente, necesito tener toda la hora en la fecha actual.

Por favor, ayúdeme. Cualquier tipo de orientación sería apreciada.

const locations = document.querySelectorAll("section.Timezone div")

const updateTimes = function () {
  locations.forEach(location => {
    const output = location.querySelector("output")
    const timezone = location.getAttribute("Country_Timezone")
    const now = luxon.DateTime.now().setZone(timezone)

output.innerHTML = now.toFormat("HH:mm:ss")

const hour = parseInt(now.toFormat("H"))
if (hour >=9 && hour < 18)
{
  location.classList.add("open")
}
}
}

updateTimes()

setInterval(function () {
  updateTimes()
}, 1000)
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para almacenar la hora actual junto con la fecha en una variable, puedes utilizar el método DateTime.local() proporcionado por Luxon, el cual crea un nuevo objeto DateTime en la zona horaria local. Para verificar si la hora actual se encuentra dentro de los rangos especificados, puedes crear tres nuevos objetos DateTime para la hora de apertura, hora de almuerzo y hora de cierre, y comparar sus valores con el objeto DateTime actual.

    Aquí tienes un código de ejemplo que te ayudará a comenzar:

    const locations = document.querySelectorAll("section.Timezone div");
    
    const updateStatus = function () {
      locations.forEach(location => {
        const output = location.querySelector("output");
        const timezone = location.getAttribute("Country_Timezone");
    
        const now = luxon.DateTime.local().setZone(timezone);
        const openingTime = luxon.DateTime.fromObject({hour: 9, minute: 15, zone: timezone});
        const lunchTime = luxon.DateTime.fromObject({hour: 13, minute: 0, zone: timezone});
        const closingTime = luxon.DateTime.fromObject({hour: 16, minute: 30, zone: timezone});
    
        if (now >= openingTime && now < lunchTime) {
          location.classList.add("open");
          output.innerHTML = "Abierto";
        } else if (now >= lunchTime && now < closingTime) {
          location.classList.remove("open");
          location.classList.add("lunch");
          output.innerHTML = "Almuerzo";
        } else {
          location.classList.remove("open");
          location.classList.remove("lunch");
          output.innerHTML = "Cerrado";
        }
      });
    };
    
    updateStatus();
    
    setInterval(function () {
      updateStatus();
    }, 1000);
    

    En este código, utilizamos DateTime.fromObject() para crear tres nuevos objetos DateTime para las horas de apertura, almuerzo y cierre, utilizando las propiedades hour, minute y zone. Luego, comparamos el objeto DateTime actual con estos objetos para determinar si la hora actual se encuentra dentro de los rangos especificados. Actualizamos el elemento output y agregamos o eliminamos las clases open y lunch en consecuencia.

Comments are closed.