Lógica de bucle for para crear dinámicamente un tiempo basado en un índice

Así que tengo 43 botones de radio. Cuando se selecciona uno de ellos, devuelve su número de índice. Está basado en cero, por lo que es 0-42. Cada índice corresponde a un tiempo particular. 0 es 8:00 am y 42 es 10:00 pm, cada índice aumenta el tiempo por 20 minutos. Esencialmente, estoy tratando de generar el tiempo que necesito sin tener que crear manualmente sentencias if para cada índice. Aquí está el código roto que tengo hasta ahora.

function decipherIndex(radx) {
    var actime = "";
    var hr = 8;
    var min = 0;
    var day = "am";
    for (i=0;i<radx;i++) {
        min = min + 20;
        if (min = 60) {
            hr = hr + 1;
            min = 0;
        }
        if (hr = 13) {
            hr = 0;
            day = "pm";
        }
    }
    actime = hr + ":" + min + day;
    alert(actime);
}

Espero que alguien pueda ayudarme a resolver mi lógica aquí. radx es el índice que se pasa a la función.

preguntado el 03 de julio de 12 a las 23:07

1 Respuestas

if (min = 60) {
    hr = hr + 1;
    min = 0;
}
if (hr = 13) {
    hr = 0;
    day = "pm";
}

Estás asignando con el =, asi que min y hr siempre será 0 y day siempre será "pm". Utilizar == or === comparar:

if (min == 60) {
    hr = hr + 1;
    min = 0;
}

if (hr == 13) {
    hr = 0;
    day = "pm";
}

Sin embargo, no es necesario un bucle; todo lo que necesitas es un poco de matemáticas.

function decipherIndex(i) {
    var t = 60 * 8 + i * 20;
    var min = t % 60;
    var hr = t / 60 | 0;

    return hr % 12 + ':' + (min < 10 ? '0' : '') + min + (hr >= 12 ? ' PM' : ' AM');
}

Respondido 03 Jul 12, 23:07

Información complementaria: === es una comparación sin conversión stackoverflow.com/questions/359494/… - laz

El mío es dos caracteres más corto :P - mellamokb

Gracias, eso era todo lo que necesitaba. - Vikram

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.