2015-12-30 4 views
-1

Я нашел этот код, но при вставке в любое время между x: 15 - x: 45 (x - любое связанное время). Я не получаю интервалы для тех времен.Интервал Массив, не создающий

var setIntervals = function (start, end, inc, oc) { 
    start = start.toString().split(':'); 
    end = end.toString().split(':'); 
    inc = parseInt(inc, 10); 
    oc = oc; 

    var pad = function (n) { return (n < 10) ? '0' + n.toString() : n; }, 
     startHr = parseInt(start[0], 10), 
     startMin = parseInt(start[1], 10), 
     endHr = parseInt(end[0], 10), 
     endMin = parseInt(end[1], 10), 
     currentHr = startHr, 
     currentMin = startMin, 
     previous = currentHr + ':' + pad(currentMin), 
     current = '', 
     r = []; 

    do { 
     currentMin += inc; 
     if ((currentMin % 60) === 0 || currentMin > 60) { 
      currentMin = (currentMin === 60) ? 0 : currentMin - 60; 
      currentHr += 1; 
     } 
     current = currentHr + ':' + pad(currentMin); 
     r.push({"end":current, "start":previous, "OpenClosed":oc}); 
     previous = current; 
    } while (currentHr !== endHr); 

    return r; 
}; 

var closedTime=setIntervals("<?php echo $close_now ?>","<?php echo $close_end ?>","15", "closed"); 
var closeArray = []; 
closeArray.push(closedTime); 

В настоящее время я только получить время от 1:30 - 2:00, но не до 2:30 ... Если я 2:00 до 3:00 я получаю все интервалы.


https://jsfiddle.net/pbbsoxrz/

Добавлен вопрос в jsfiddle

учтивый из JavaScript Setting Time Difference through Loop In Array

+0

* Я не получаю интервалы для тех времен. * Что вы получаете? Чего ты ожидал? Как вы на самом деле называете это (в Javascript не в php). Каковы фактические значения, передаваемые функции 'setIntervals'? Прошли ли вы через функцию, чтобы увидеть, что она делает? –

+0

Ack ... Представьте, что я на самом деле получаю взамен. В настоящее время я получаю только время с 1:30 до 2:00, но не до 2:30 ... Если я делаю 2:00 до 3:00, я получаю все интервалы. – Cam

+0

* В настоящее время я получаю только время с 1:30 до 2:00, но не до 2:30 .. * когда вы передаете что-то в качестве входа? '1: 15' и' 2: 45'? Или что-то другое? Потому что в вашем вопросе говорится, что 'x: 15 - x: 45', из которого большинство людей будет считать, что' x' - это тот же номер в обоих случаях. –

ответ

1

Просто измените условия while и добавить часть для протокола с логическим или.

while (currentHr !== endHr || currentMin !== endMin); 

var setIntervals = function (start, end, inc, oc) { 
 
    start = start.toString().split(':'); 
 
    end = end.toString().split(':'); 
 
    inc = parseInt(inc, 10); 
 
    oc = oc; 
 

 
    var pad = function (n) { return (n < 10) ? '0' + n.toString() : n; }, 
 
     currentHr = parseInt(start[0], 10), 
 
     currentMin = parseInt(start[1], 10), 
 
     endHr = parseInt(end[0], 10), 
 
     endMin = parseInt(end[1], 10), 
 
     previous = currentHr + ':' + pad(currentMin), 
 
     current = '', 
 
     r = []; 
 

 
    do { 
 
     currentMin += inc; 
 
     currentHr += currentMin/60 | 0; 
 
     currentMin %= 60; 
 
     current = currentHr + ':' + pad(currentMin); 
 
     r.push({ start: previous, end: current, OpenClosed: oc }); 
 
     previous = current; 
 
    } while (currentHr !== endHr || currentMin !== endMin); // <----------- change this! 
 

 
    return r; 
 
}; 
 

 
var closedTime = setIntervals("12:15", "14:45", "15", "closed"); 
 
var closeArray = []; 
 
closeArray.push(closedTime); 
 

 
document.write('<pre>' + JSON.stringify(closeArray, 0, 4) + '</pre>');

+0

Проверяй сейчас спасибо. – Cam

0

Вот то, что вы хотите:

var setIntervals = function(start, end, inc, oc) { 
    var date1 = new Date('2015-1-1 ' + start), 
     date2 = new Date('2015-1-1 ' + end), 
     r = [], 
     current, 
     previous; 

    // Make sure we increment is a positive number so we don't have an infinite loop 
    inc = Math.abs(parseInt(inc, 10)); 

    do { 
     previous = ('0' + date1.getHours()).slice(-2) + ':' + ('0' + date1.getMinutes()).slice(-2); 
     date1.setTime(date1.getTime() + inc * 60 * 1000); 
     current = ('0' + date1.getHours()).slice(-2) + ':' + ('0' + date1.getMinutes()).slice(-2); 
     r.push({ 
      "end": current, 
      "start": previous, 
      "OpenClosed": oc 
     }); 
    } while (date1.getTime() < date2.getTime()); 

    return r; 
}; 

var closeArray = [setIntervals("13:30", "14:30", "15", "closed")]; 
console.log(closeArray); 

это время состояние исходного кода вызывает цикл до конца каждый раз, когда два часа равны.

Этот подход упрощает некоторые вещи.

Смежные вопросы