Следующий код, который я настроил из этого предыдущего SO-ответа , пытается выполнить цикл в диапазоне от 2/5/13 до 2/10/13, включая обе конечные точки.
var start = new Date("02/05/2013");
var end = new Date("02/10/2013");
var output = [];
var loop = new Date(start);
alert(loop)
while(loop < end){
output.push(loop);
var newDate = loop.setDate(loop.getDate() + 1);
loop = new Date(newDate);
}
var strings = JSON.stringify(output);
var pgraf = document.createElement('p');
var ptext = document.createTextNode(strings)
pgraf.appendChild(ptext)
document.body.appendChild(pgraf);
По какой-то причине, которую я не понимаю, однако, в то время как предупреждение перед циклом предупреждает 2/5/13, как и следовало ожидать, первый элемент в фактическом выходном массиве - 2/6/13. Таким образом, строка, в конечном итоге добавленная к DOM, является
[ "2013-02-06T07: 00: 00.000Z", "2013-02-07T07: 00: 00.000Z", "2013-02-08T07: 00: 00.000Z", "2013-02-09T07: 00: 00.000Z», "2013-02-10T07: 00: 00.000Z"]
Так что это загадка № 1.
Mystery # 2: я попытался немного урезать этот код, заменив все, начиная с создания выходного массива и заканчивая концом цикла:
var output = [start];
while(start < end){
var newDate = start.setDate(start.getDate() + 1);
start = new Date(newDate);
output.push(start);
}
Но на этот раз вывод еще более странный: он вообще не включает начальное значение начальной переменной, но дважды включает последнее значение.
[ "2013-02-06T07: 00: 00.000Z", "2013-02-07T07: 00: 00.000Z", "2013-02-08T07: 00: 00.000Z", "2013-02-09T07: 00: 00.000Z», "2013-02-10T07: 00: 00.000Z", "2013-02-10T07: 00: 00.000Z"]
Очевидно, я не понимаю, что здесь происходит в цикле. Но я программирую на не-JS языках уже несколько лет - мне нравится думать, что я понимаю, как работают циклы! Может кто-нибудь сказать мне, что я облажался здесь?