Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Error con operadores relacionales

Estas en el tema de Error con operadores relacionales en el foro de Javascript en Foros del Web. Amigos estoy escribiendo en JavaScript lo siguiente: Código: <!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> function horarios () { /*programación ...
  #1 (permalink)  
Antiguo 08/09/2014, 23:51
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Error con operadores relacionales

Amigos estoy escribiendo en JavaScript lo siguiente:

Código:
<!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script type="text/javascript">
    function horarios () {
    /*programación del día*/
        var hoy=new Date();
        var fecha=hoy.getDate();
        var dia=hoy.getDay();
        var hora=hoy.getHours();
        var minuto=hoy.getMinutes();
        
        /*Martes*/
        if(dia>=2 && dia<3 && hora>=0 && <6) {
            document.write("<small>Música continúa</small>")
        } else
        if(dia>=2 && dia<3 && hora>=6 && <6.30) {
            document.write("<small>Paso doble</small>")
        } else
        if(dia>=2 && dia<3 && hora>=6.30 && <7) {
            document.write("<small>Música infantil</small>")
        }
    /*programación del día*/
    }
    horarios();
    setInterval ("horario()", 60000);
    </script>
</body>
</html>
Pero algo esta mal en la linea 18 en el operador < ya que estoy intentando validar tanto la variable día y hora pero no funciona.
Comentarles que la intención de este código es que muestra la programación de cada día de acuerdo a la hora y que cada minuto (60000 miliseg.) compruebe el cambio de hora pero ahora estoy atorado de antemano gracias por sus atenciones.
  #2 (permalink)  
Antiguo 09/09/2014, 04:43
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 3 meses
Puntos: 578
Respuesta: Error con operadores relacionales

Cita:
if(dia>=2 && dia<3 && hora>=0 && <6)
¿Qué es menor que 6?
  #3 (permalink)  
Antiguo 09/09/2014, 07:42
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

Cita:
Iniciado por PHPeros Ver Mensaje
0†7Qu¨¦ es menor que 6?
<6 forma parte de la validacion de la variable "hora" como te habras fijado uso el mismo operador "&&" para validar las dos variables no se si sea correcto ya que intento validar lo siguiente: si dia es mayor o igual martes y menor a miercoles y mayor o gual a cero horas y menor a seis horas, si es verdadero continuar con document.write, basicamente es lo que quiero hacer pero me da error
  #4 (permalink)  
Antiguo 09/09/2014, 10:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Error con operadores relacionales

La comparación es incorrecta. Lo debes de hacer exactamente como en la primera parte de la condición, es decir hora>=0 && hora<6. Si lo dejas solo como hora>=0 && <6, es como si compararas al 6 con nada y eso no tendría sentido.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 09/09/2014, 13:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

  • el comentario javascript no es /* ....*/ (es de css). el de js es //
  • esta y las demás condiciones no tienen sentido
    Cita:
    if(dia>=2 && dia<3 && hora>=0 && <6)
    dia ha de ser mayor o igual a 2 y menor que 3, por lo tanto sólo puede ser 2. el otro error ya te lo han comentado
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 09/09/2014, 14:47
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

Alexis88 no me había percatado del error pero gracias a lo que comentaste volví a revisar todo y encontré un error mas, por ahora ya funciona.

IsaBelM estas en lo cierto con el comentario javascript no es /* ....*/ (es de css). el de js es //

Código Javascript:
Ver original
  1. if(dia>=2 && dia<3 && hora>=0 && hora<6)
dia ha de ser mayor o igual a 2 y menor que 3, por lo tanto sólo puede ser 2.

En este caso cual es la forma correcta para validar mi condición, es decir; que solo el día martes desde las cero horas hasta las 6 me muestre el texto que indique en document.write.

Disculpen si no me hago entender debidamente de antemano gracias por sus comentarios

Última edición por MarkFL; 09/09/2014 a las 15:08
  #7 (permalink)  
Antiguo 09/09/2014, 15:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Error con operadores relacionales

Usa tu lógica. Si el día solo puede ser igual a 2, entonces haz esto:

Código Javascript:
Ver original
  1. if (dia == 2 && (hora >= 0 && hora < 6))

Fíjate que encierro entre paréntesis a las condiciones de la derecha pues de ellas se obtendrá un resultado, el cual será comparado con el de la primera condición. Si dices que la hora va de 0 a 6, entonces en la segunda condición debería de ser hora <= 6. Por cierto, en JS también se puede comentar con /**/, solo que se estila hacerlo en casos de comentarios en más de una línea.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 09/09/2014, 18:28
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: Error con operadores relacionales

El comentario de tipo /*...*/ en javascript es correcto:
https://developer.mozilla.org/en-US/...exical_grammar
  #9 (permalink)  
Antiguo 10/09/2014, 04:22
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

pero que tonta. si lo he visto mil veces en los créditos y yo misma lo he usado
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #10 (permalink)  
Antiguo 10/09/2014, 05:34
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 6 meses
Puntos: 834
Respuesta: Error con operadores relacionales

Nada de eso, Isabel. Es que tanta mezcla de lenguajes termina por confundirnos
  #11 (permalink)  
Antiguo 10/09/2014, 15:42
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

Amigos,muchas gracias por su orientación en este tema ya solo tengo una duda más este es mi código actual:

Código:
 <!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
    <script type="text/javascript">
    function horarios () {
    //programación del día
        var hoy=new Date();
        var fecha=hoy.getDate();
        var dia=hoy.getDay();
        var hora=hoy.getHours();
        
        //Miércoles
        if(dia == 3 && (hora >=11.30 && hora<=13.59)) {
            document.write("<small>Música pop</small>")
        } else
        if(dia == 3 && (hora >=14 && hora<=15)) {
            document.write("<small>Música internacionl</small>")
        }   
    //programación del día
    }
    horarios();
    setInterval ("horarios()", 60000);
    </script>
</body>
</html>
Utilice setInterval para repetir todo el script y así mantener actualizado a cada minuto el document.write que quiero mostrar, pero al parecer no es lo mejor ya que la página web se llena del texto validado para mostrar.

Lo que he pensado es hacer una especie de bucle no se si la etiqueta "for" me sirva en este propósito:

Código:
  if(dia == 3 && (hora >=11.30 && hora<=13.59)) {
            document.write("<small>Música pop</small>")
        }
Si día es 3 y hora es mayor o igual a 11.30 y menor o igual a 13.59
escribir "Música pop"... aquí es donde quisiera implementar un bucle para comprobar si el día es 3 y la hora sigue siendo mayor o igual a 11.30 y menor o igual a 13.59 no escribir "Música pop" hasta que deje de cumplirse la condición podrá avanzar hacia mi siguiente etiqueta else.

Código:
 else
        if(dia == 3 && (hora >=14 && hora<=15)) {
            document.write("<small>Música internacionl</small>")
        }
O ya de plano con: <meta http-equiv="refresh" content="30">
Espero haberme explicado bien
  #12 (permalink)  
Antiguo 11/09/2014, 05:48
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

Cita:
Iniciado por Panino5001 Ver Mensaje
Nada de eso, Isabel. Es que tanta mezcla de lenguajes termina por confundirnos
gracias, andrés

MarkFL, uno de los problemas es el uso de write(). en su lugar puedes usar textContent. lo he editado un poco
Código:
!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
    <style type="text/css">
.musica {
    font-size: 70%;
}
    </style>
     <script type="text/javascript">
    function horarios () {
    //programación del día
        var hoy=new Date();
        var fecha=hoy.getDate();
        var dia=hoy.getDay();
        var hora=hoy.getHours();

        //Miércoles
        if(dia == 3 && (hora >=11.30 && hora<=13.59)) {
            document.querySelector('.musica').textContent = "Música pop";
        } else
        if(dia == 3 && (hora >=14 && hora<=15)) {
            document.querySelector('.musica').textContent = "Música internacionl";
        }   
    //programación del día
    }
    setTimeout(horarios, 0);
    setInterval(horarios, 60000);
    </script>
</head>
<body>
   <span class="musica"></span>
</body>
</html>
aún así la primera condición no se cumplirá nunca. getHours() solamente devuelve la hora, no los minutos.

por otro lado, si este es el único código que contiene el documente, puedes usar el <meta> siempre y cuando lo mantengas con ese intervalo. aunque en mi opinión la mejor opción es usar un temperizador js
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #13 (permalink)  
Antiguo 11/09/2014, 16:47
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

IsaBelM

Ya se me hacia raro que solo cuando insertaba horas sin minutos funcionaba bien pero es un detalle que necesito resolver respecto a los minutos he tomado tu código y le agregue estas lineas:

Código:
var minuto=hoy.getMinutes();
var horaminuto=hora+':'(minuto);
e intente validar de esta forma pero no me funciona:

Código HTML:
if(dia == 3 && (horaminuto >=11:30 && horaminuto<=13:59)) {
document.querySelector('.musica').textContent = "Música pop";
} else
if(dia == 3 && (horaminuto >=14:0 && horaminuto<=15:0)) {
document.querySelector('.musica').textContent = "Música internacionl";
}
no entiendo como poder validar horas y minutos en una sola condicional

Este es el código actual con las nuevas lineas que agregue:

Código:
<!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
    <style type="text/css">
.musica {
    font-size: 70%;
}
    </style>
     <script type="text/javascript">
    function horarios () {
    //programación del día
        var hoy=new Date();
        var fecha=hoy.getDate();
        var dia=hoy.getDay();
        var hora=hoy.getHours();
        var minuto=hoy.getMinutes();
        var horaminuto=hora+':'(minuto);

        //Miércoles
        if(dia == 3 && (horaminuto >=11:30 && horaminuto<=13:59)) {
            document.querySelector('.musica').textContent = "Música pop";
        } else
        if(dia == 3 && (horaminuto >=14:0 && horaminuto<=15:0)) {
            document.querySelector('.musica').textContent = "Música internacionl";
        }   
    //programación del día
    }
    setTimeout(horarios, 0);
    setInterval(horarios, 60000);
    </script>
</head>
<body>
   <span class="musica"></span>
</body>
</html>
  #14 (permalink)  
Antiguo 12/09/2014, 04:55
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

  • la concatenación está mal
    Cita:
    var horaminuto=hora+':'+minuto;
  • las 11:30, 15:59, etc.... ya no son valores numéricos, son strings. y como tales, han de estar entrecomillados
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #15 (permalink)  
Antiguo 13/09/2014, 01:14
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

Para agradecerles a ustedes amiga y amigos por su valioso tiempo y conocimiento para lograr mi objetivo y sobre todo por que aprendi mucho de este lenguage del que pienso seguir aprendiendo mas, fantastico foro JavaScript saludos! :)
  #16 (permalink)  
Antiguo 14/09/2014, 07:21
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

si dices que está solucionado, así será. pero diría que no. sobre todo si has aplicado lo que te comenté en mi post anterior.

Cita:
console.log('11:30' >= '11:30); // true
console.log('11:31' >= '11:30); // false
console.log('11:32' >= '11:30); // false
........
console.log('11:58' <= '11:59); // false
console.log('11:59' <= '11:59); // true
si te fijas sólo retorna true cuando ambas cadenas son igual. esto quiere decir que una cadena no puede ser evaluada con los operadores (< y >)
funcionará siempre y cuando el usuario entre en la web a las 11:30 o 11:59. si entra a las 11:34, no se imprimirá nada. la solución pasa por evaluar las horas y los minutos por separados

Cita:
if (hora == 11 && (minuto >= 30 || minuto <= 59))
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #17 (permalink)  
Antiguo 15/09/2014, 23:15
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

IsaBelM;

Lamento decir que aun no esta del todo bien; ya que hay un fallo al momento de llegar a las 0:0 cero horas con cero minutos, el punto esta en que llegando a esa hora se queda detenido y ya no me hace las validaciones.

Aparte comentar con respecto a tus pruebas de consola no se por que a mi tambien me daba error pero me funcionaron cuando agregue la coma simple:

Código:
console.log('11:31' >= '11:30'); // true
No lo se, pero al parecer da error por la falta de cierre de la ultima coma simple comentar que la validación de las horas y minutos por medio de:

Código:
 if(dia == 1 && (horaminuto >="11:30" && horaminuto<="11:59")) {
		document.querySelector('.musica').textContent = "Música pop";
}
Si me funciona, ahora la solución que comentas la pondré a prueba solo que tengo duda por que solo estaríamos validando las hora y minutos pero el día como lo valido dentro de tu recomendación?

Gracias de antemano!

Código:
if (hora == 11 && (minuto >= 30 || minuto <= 59))
  #18 (permalink)  
Antiguo 15/09/2014, 23:48
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 18 años, 5 meses
Puntos: 32
Respuesta: Error con operadores relacionales

Cita:
Iniciado por IsaBelM
si te fijas sólo retorna true cuando ambas cadenas son igual. esto quiere decir que una cadena no puede ser evaluada con los operadores (< y >)
Tenía entendido que si que podía evaluarse. 11:58 <= 11:59, de hecho me da true. El problema de comparar cadenas es que se comparan alfabéticamente. Con lo cual si 'aab' < 'ab'. Tendremos problemas como que '1:50' < '11:50' === false

Un saludo!
__________________
github.com/xgbuils | npm/xgbuils
  #19 (permalink)  
Antiguo 16/09/2014, 06:17
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

vaya, este tema parece que lo tengo cruzado

Cita:
Iniciado por Pantaláimon Ver Mensaje
Tenía entendido que si que podía evaluarse. 11:58 <= 11:59, de hecho me da true. El problema de comparar cadenas es que se comparan alfabéticamente. Con lo cual si 'aab' < 'ab'. Tendremos problemas como que '1:50' < '11:50' === false

Un saludo!
tienes razón en todo lo que comentas excepto en que:

la comparación de cadenas no tiene que ver nada con el orden alfabético. lo que ocurre es que usa el valor unicode de esos caractares

Cita:
'1:' < '11:' // false
'\u00001\u02D00' < '\u00001\u00001\u02D00' // false
por otro lado, los operadores relacionales (>, <, >=, <=) intenta convertir los datos en tipo número

Cita:
Iniciado por MarkFL Ver Mensaje
Si me funciona, ahora la solución que comentas la pondré a prueba solo que tengo duda por que solo estaríamos validando las hora y minutos pero el día como lo valido dentro de tu recomendación?

Gracias de antemano!

Código:
if (hora == 11 && (minuto >= 30 || minuto <= 59))
Cita:
if (dia == 3 && hora == 11 && (minuto >= 30 || minuto <= 59))
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #20 (permalink)  
Antiguo 16/09/2014, 15:09
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

IsaBelM

Código:
if (dia == 3 && hora == 11 && (minuto >= 30 || minuto <= 59))
Ya puse a prueba el código que me has sugerido pero no ha podido validar correctamente los minutos ya que los ignora y solo toma en cuenta las horas por lo tanto solo salta a la siguiente condición cuando se valida la siguiente hora.

Como comente con el anterior código si validaba los minutos aunque solo había un problema al llegar a las 0:0 dejaba de seguir validando.

Por cierto lo que menciona Pantaláimon me ha dejado confundido!
  #21 (permalink)  
Antiguo 16/09/2014, 15:36
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Error con operadores relacionales

las condicional es esta
Cita:
if (dia == 3 && hora == 11 && (minuto >= 30 && minuto <= 59))
en lugar del lógico || es &&

pd: que ahora esté bien
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #22 (permalink)  
Antiguo 17/09/2014, 11:35
Avatar de MarkFL  
Fecha de Ingreso: mayo-2011
Mensajes: 85
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Error con operadores relacionales

Cita:
Iniciado por IsaBelM Ver Mensaje
las condicional es esta

en lugar del lógico || es &&

pd: que ahora esté bien
Ya esta validando correctamente incluso después de las 0:0 que era la hora donde se pausaba la validación, ahora voy a evaluarlo para comprobar que funciona a lo largo de la semana las 24 horas y así comprobar su funcionamiento continuo.

Muchísimas gracias IsaBelM, por tu paciencia e interés pero sobre todo por compartir tu conocimiento en este gran foro, saludos!

Etiquetas: funcion, operadores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:45.