Estoy jugando con JavaScript IF/ELSE para entender mejor cómo funciona. Como ejercicio tomé el siguiente horario de trabajo de una tienda:
luego creé una función que devuelve la palabra 'Abierto' o 'Cerrado' en función de los 2 valores "tiempo" y "período".
function shopHours(time,period) { if (time === 6 && period === 'AM') { return 'Open'; } else if (time === 6 && period === 'AM') { return 'Open'; } else if (time === 7 && period === 'AM') { return 'Open'; } else if (time === 8 && period === 'AM') { return 'Open'; } else if (time === 9 && period === 'AM') { return 'Open'; } else if (time === 10 && period === 'AM') { return 'Open'; } else if (time === 11 && period === 'AM') { return 'Open'; } else if (time === 12 && period === 'PM') { return 'Open'; } else if (time === 1 && period === 'PM') { return 'Open'; } else if (time === 2 && period === 'PM') { return 'Open'; } else if (time === 3 && period === 'PM') { return 'Open'; } else if (time === 4 && period === 'PM') { return 'Open'; } else if (time === 5 && period === 'PM') { return 'Open'; } else { return 'Closed';} }Todo funciona bien. Sin embargo, me gustaría poder acortar el código ya que parece demasiado confuso.
Luego probé lo siguiente:
function shopHours(time,period) { if(time <= 6 && period === 'AM') { return 'Closed'; } else if (time >= 6 && period === 'PM') { return 'Closed'; } else if (time === 12 && period === 'PM') { return 'Open'; } else { return 'Open';} }El segundo código también funciona bien y es mucho más corto, sin embargo, hay un problema que no estoy seguro de cómo resolver. Cuando la hora y el período se establecen en 12:00 p. m., el resultado debe ser 'cerrado', pero no estoy seguro de cómo implementarlo.
He intentado agregar el siguiente código, pero parece que no resolvería este problema.
else if (time === 12 && period === 'AM') { return 'Closed'; }Estaré muy agradecido a cualquiera que dedique un poco de su tiempo a analizar esta pregunta.
¡Gracias!
Puede dividirlo en dos escenarios iniciales, AM o PM. Luego verifique la hora para ver si debe estar abierto o cerrado.
if (period == "AM") { if (time < 6 || time == 12) return "Closed"; return "Open"; } else { if (time >= 6 && time != 12) return "Closed"; return "Open"; }En mi opinión, es más fácil trabajar con formato de 24 horas. Sin embargo, hay que tener en cuenta 12 p. m. 12PM = 12:00 y 12 a. 12AM = 00:00 .
Después de la conversión, la comparación es bastante fácil.
function shopHours(time, period) { let hour = time; if (period === 'PM' && hour < 12) hour = hour + 12; if (period === 'AM' && hour === 12) hour = hour - 12; if (hour >= 6 && hour < 18) { return 'Open'; } return 'Closed'; } console.log('12 AM is ' + shopHours(12, 'AM') + '. Expected it to be: Closed'); console.log('3 AM is ' + shopHours(3, 'AM') + '. Expected it to be: Closed'); console.log('6 AM is ' + shopHours(6, 'AM') + '. Expected it to be: Open'); console.log('9 AM is ' + shopHours(9, 'AM') + '. Expected it to be: Open'); console.log('12 PM is ' + shopHours(12, 'PM') + '. Expected it to be: Open'); console.log('3 PM is ' + shopHours(3, 'PM') + '. Expected it to be: Open'); console.log('6 PM is ' + shopHours(6, 'PM') + '. Expected it to be: Closed'); console.log('9 PM is ' + shopHours(9, 'PM') + '. Expected it to be: Closed');Mi objetivo version.if es simplemente acortar el código, entonces esas funciones am() and pm() se pueden omitir y el código interno se puede agregar donde las estoy llamando. Serían 3 líneas de código.
function shopHours(time, period){ var result; function am () { Number(time) < 12 && Number(time) >= 6 ? result = "open" : result = "closed"; } function pm() { Number(time) <= 5 || Number(time) === 12 ? result = "open" : result = "closed"; } period === 'AM' ? am() : pm(); return result; } console.log("12 AM is: ", shopHours(12, 'AM'), '; expected: closed'); console.log("3 AM is: ", shopHours(3, 'AM'), '; expected: closed'); console.log("6 AM is: ", shopHours(6, 'AM'), '; expected: open'); console.log("9 AM is: ", shopHours(9, 'AM'), '; expected: open'); console.log("12 PM is: ", shopHours(12, 'PM'), '; expected: open'); console.log("3 PM is: ", shopHours(3, 'PM'), '; expected: open'); console.log("6 PM is: ", shopHours(6, 'PM'), '; expected: closed'); console.log("9 PM is: ", shopHours(9, 'PM'), '; expected: closed');