Autor
|
Tema: Problema con una condición (Si...Sino) en javascript (Leído 4,638 veces)
|
Aikanáro Anário
|
Tengo que hacer una página que muestre un plato y un color de fondo diferente según la hora del día. Ya lo tengo hecho, solo que tengo problemas con una condición. Este es el código: <html> <head> <title> Restaurante Delicious </title> </head> <body> <script language="javascript"> var d = new Date(); var hora = d.getHours(); document.write('<font size="6"> <em> <strong> <center> Restaurante Delicious </center> </strong> </em> </font size>'); if (hora >= 02 && hora < 6) { document.write('<center> El restaurante está cerrado. <br> Nuestros horarios son de lunes a domingo de 6:00 a.m. a 2:00 a.m. </center>'); } else { document.write('<font size="1" color="E5E7DF"> Esta página le mostrará un plato según la hora del día <br> </font size color'); document.write('<p> Para ahora tenemos: </p>'); if (hora >= 06 && hora < 12) { document.bgColor='A68785' document.write('<center> <strong> Desayuno </strong> <br> Mangú de plátano verde </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/mangu.jpg"> </center>'); } if (hora >= 12 && hora < 18) { document.bgColor='AAB295' document.write('<center> <strong> Almuerzo </strong> <br> Bistec Encebollado </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/bistec.jpg">'); } if (hora >= 18 && hora < 02) { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); } } </script> </body> </html>
El problema es con la última condición. Si la hora es mayor o igual de las 6 de la tarde y menor que las 2 de la mañana debería mostrar Sopa de pescado y la foto correspondiente. Pero haciendo una prueba, si pongo mi reloj a cualquier hora mayor que las 00 (o sea las 12 de la noche o madrugada) y menor que las 2 (tiene que ser menor, porque si no se cumpliría el primer if o condición o luego no se ejecutarían lo demás, estaría cerrado el restaurante). O sea funciona bien, pero solo con la hora menor de las 00. No entiendo porque, creo que la lógica está bien planteada. Es como si hubiera un corte a partir de las 00 y el sistema lo calculara diferente. Sé que puedo resolverlo poniendo dos condiciones, así: if (hora >= 18 && hora < 00) { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); } if (hora >= 00 && hora < 02) { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); }
Pero, si la lógica del primero está bien ¿Por qué no funciona como debería?
|
|
« Última modificación: 10 Junio 2011, 07:08 am por Aikanáro Anário »
|
En línea
|
|
|
|
Maurice_Lupin
Desconectado
Mensajes: 356
GPS
|
no es lógico que una hora sea mayor que 18 y menor que 2 al mismo tiempo, eso es lo que significa la && verdadero si ambas condiciones verdaderas. Prueba cambiando el && por ||, debería funcionar
|
|
|
En línea
|
Un error se comete al equivocarse.
|
|
|
mit
Desconectado
Mensajes: 830
¡Mit!
|
La solucion de aca del brother esta bién pero innecesaria xD, basta con que pongas un else. Tu tienes esto: if (hora >= 18 && hora < 02) { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); }
Cambialo por esto: else { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); }
Y esto es claro porque ese rango que quieres cubrir, es el único que queda por validar, por lo tanto es un else a tus demás validaciones. Saludos
|
|
|
En línea
|
|
|
|
Aikanáro Anário
|
no es lógico que una hora sea mayor que 18 y menor que 2 al mismo tiempo, eso es lo que significa la && verdadero si ambas condiciones verdaderas. Prueba cambiando el && por ||, debería funcionar Sí, es lógico porque el formato es 24 horas. Las 18 son las 6 de la tarde y las 02, son las dos de la madrugada. Así, una hora puede ser mayor que las 18 (o sea las 6 de la tarde) y menor que las 2 (de la madrugada). Entonces "(hora >= 18 && hora <2)" abarca cualquier hora entre las 6 de la tarde y las 2 de la madrugada. Intenté poner || como dices, pero cuando hice la prueba me di cuenta que así saldrían dos platos. Porque la condición está diciendo "si es mayor que las 6 O menor que las 2" y así saldría el desayuno o el almuerzo, dependiendo de la hora del día, porque tanto el desayuno como el almuerzo están antes de las 2 de la madrugada, por lo tanto su hora correspondiente es menor que 2 y se cumplirían las dos condiciones. La solucion de aca del brother esta bién pero innecesaria xD, basta con que pongas un else. Tu tienes esto: if (hora >= 18 && hora < 02) { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); }
Cambialo por esto: else { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="/home/gustavo/Escritorio/Documentos/ITLA/2do cuatrimestre/Fundamento de programacion/Programas/Imagenes restaurante/sopa.jpg"> </center>'); }
Y esto es claro porque ese rango que quieres cubrir, es el único que queda por validar, por lo tanto es un else a tus demás validaciones. Saludos Ok, no pensé en eso xD. Para aclarar... ¿me dices que siempre en la última condición que vaya a hacer debo usar un else, ya que las demás no se cumplirían y solo quedaría esa?
Lo puse así: <html> <head> <title> Restaurante Delicious </title> </head> <body> <script language="javascript"> alert('La hora de su sistema debe estar configurada correctamente para la adecuada visualizaci\u00f3n del sitio. Si no lo est\u00e1, por favor aj\u00fastela y vuelva a cargar la p\u00e1gina.'); var d = new Date(); var hora = d.getHours(); document.write('<font size="6"> <em> <strong> <center> Restaurante Delicious </center> </strong> </em> </font size>'); if (hora >= 02 && hora < 6) { document.write('<center> El restaurante está cerrado. <br> Nuestros horarios son de lunes a domingo de 6:00 a.m. a 2:00 a.m. </center>'); } else { document.write('<font size="1" color="E5E7DF"> Esta página le mostrará un plato según la hora del día <br> </font size color'); document.write('<p> Para ahora tenemos: </p>'); if (hora >= 06 && hora < 12) { document.bgColor='A68785' document.write('<center> <strong> Desayuno </strong> <br> Mangú de plátano verde </center> <br> <br>'); document.write('<center> <img src="Imagenes restaurante/mangu.jpg"> </center>'); } else if (hora >= 12 && hora < 18) { document.bgColor='AAB295' document.write('<center> <strong> Almuerzo </strong> <br> Bistec Encebollado </center> <br> <br>'); document.write('<center> <img src="Imagenes restaurante/bistec.jpg"> </center>'); } else { document.bgColor='D8FC84' document.write('<center> <strong> Cena </strong> <br> <font size="4"> Sopa de Pescado </font size> </center> <br> <br>'); document.write('<center> <img src="Imagenes restaurante/sopa.jpg"> </center>'); } } </script> </body> </html>
Y funciona bien.
|
|
« Última modificación: 10 Junio 2011, 17:45 pm por Aikanáro Anário »
|
En línea
|
|
|
|
cassiani
Desconectado
Mensajes: 978
« Anterior | Próximo »
|
Te han dicho que es ilógico porque la variable HORA no puede contener esos dos valores al mismo tiempo, será mayor o igual que 18 ó será menor que 2, uno de las dos. ejemplo: hora = 20;
if (hora >= 18 && hora < 02) .... simplemente no entrara en el bloque porque no se cumplen las DOS condiciones, eso va a ser indiferente de si las 18 son las 6 o no, aquí estas trabajando con el formato 24 (desde 0:00 hasta 23:59) y debes evaluar dentro del rango de esos valores. así también podrías trabajarlo: var hora = 20; if (hora >= 06 && hora < 12) { // ... alert ('esta entre las 6 y las 12'); } else if (hora >= 12 && hora < 18) { // ... alert ('esta entre las 12 y las 18'); } else if (hora >= 18 || hora < 02) { // ... alert ('esta entre las 18 y las 2'); }
|
|
|
En línea
|
|
|
|
Aikanáro Anário
|
Te han dicho que es ilógico porque la variable HORA no puede contener esos dos valores al mismo tiempo, será mayor o igual que 18 ó será menor que 2, uno de las dos. ejemplo: hora = 20;
if (hora >= 18 && hora < 02) .... simplemente no entrara en el bloque porque no se cumplen las DOS condiciones, eso va a ser indiferente de si las 18 son las 6 o no, aquí estas trabajando con el formato 24 (desde 0:00 hasta 23:59) y debes evaluar dentro del rango de esos valores. Es que la variable no tiene que coger los dos valores. Es diferente a decir que se tienen que cumplir las dos condiciones. La variable tuviera que coger los dos valores si usara signos de igual, así: (hora=18 && hora=02), pero estoy diciendo que sea mayor que un número y menor que otro, y esas dos condiciones sí se pueden cumplir, por ejemplo si la hora fueran las 20. Es mayor que 18 y menor que las 2 de la madrugada, así, sí entraría en el bloque. Porque lo que busco es que entre en el bloque solamente durante la noche, a partir de las 18. Con respecto a usar || , no sé que hice mal la primera vez que salían dos imágenes, pero volví a probar ahora y no salen, o sea también es válido hacerlo así.
|
|
« Última modificación: 10 Junio 2011, 20:32 pm por Aikanáro Anário »
|
En línea
|
|
|
|
Maurice_Lupin
Desconectado
Mensajes: 356
GPS
|
ya me estaba creyendo que me equivoque o.0!
|
|
|
En línea
|
Un error se comete al equivocarse.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con php Condicion de session
« 1 2 »
PHP
|
alexkof158
|
15
|
11,829
|
27 Noviembre 2009, 22:10 pm
por [u]nsigned
|
|
|
Cambio de boton a partir de una condición (HTML,javascript)
Desarrollo Web
|
rolomo
|
5
|
4,064
|
24 Enero 2012, 23:04 pm
por Shell Root
|
|
|
[RESUELTO] Problema con condicion IF ELSE en PHP
Desarrollo Web
|
rodrigoandres91
|
2
|
2,037
|
15 Noviembre 2015, 17:52 pm
por rodrigoandres91
|
|
|
Problema de acceso a una condición
Programación C/C++
|
poliche
|
0
|
1,664
|
6 Octubre 2016, 01:08 am
por poliche
|
|
|
¿Como puedo crear una condición si algo incrementa? javascript
Desarrollo Web
|
SrTrp
|
2
|
2,135
|
10 Septiembre 2017, 02:27 am
por SrTrp
|
|