Mi objetivo es almacenar el saludo variable con "Good AM" si se encuentra entre la medianoche y las 12 p. m. o "Buenas tardes" si es entre las 12:00 y las 18:00 horas. o "Buenas noches" si es entre las 18:00 y la medianoche.
He adjuntado mi código en la parte inferior. El problema es que siempre devuelve el resultado de greet = "Good AM"
, aunque no sea por la mañana/caiga en el rango especificado en este caso.
Descubrí que hay algo mal con la parte case (0 < timeNow <= 12)
ya que modifiqué mi código para reemplazar case (0 < timeNow <= 12)
usando case(timeNow<=12)
y funciona. ¿Alguien sabe por qué sucede esto?
p/s: También noté la advertencia de 'Mezcla inesperada de '<' y '<='. (no-mixed-operators) eslint' en mi sandbox de código.
const timeNow = new Date('8-26-2021 23:15:00').getHours(); console.log(timeNow); switch (true) { case (0 < timeNow <= 12): greet = "Good AM"; break; case timeNow <= 18: greet = "Good Afternoon"; break; case timeNow <= 23: greet = "Good Evening"; break; default: greet = "error"; } console.log(greet);
Esta condición no significa lo que crees que significa:
0 < timeNow <= 12
Por ejemplo, si la primera condición se resuelve como true
, el resto de la condición es:
true <= 12
Lo cual no tiene mucho sentido. Las expresiones son lógicas , no intuitivas . Si desea verificar dos cosas separadas, escriba dos expresiones separadas y combínelas con un operador lógico:
0 < timeNow && timeNow <= 12
Como dijo @David ... Aquí hay un fragmento con un tiempo codificado para fines de demostración junto con la comparación corregida en la declaración del primer case
:
const timeNow = new Date('8-26-2021 23:15:00').getHours(); console.log(timeNow); switch (true) { case (timeNow <= 12): greet = "Good AM"; break; case timeNow <= 18: greet = "Good Afternoon"; break; case timeNow <= 23: greet = "Good Evening"; break; default: greet = "error"; } console.log(greet);