Рейтинг:
1
raddevus
Как насчет этого?
function getDateArray (start, end) {
var arr = [];
var startDate = new Date(start);
var endDate = new Date(end);
while (startDate <= endDate) {
arr.push(new Date(startDate.setMonth(startDate.getMonth() + 1)));
}
return arr;
}
function test (){
var z = "2018-09-01"; var y = "2019-09-10"
var dateArr = getDateArray(z, y);
alert(dateArr[0] + "\n" + dateArr[1] + "\n" + dateArr[2]);
}
Я изменил ваши dt0 и endD на startDate и endDate.
Кроме того, цикл while немного проще, и он, кажется, работает.
Вы можете видеть, как он работает на:
JS Bin - совместная отладка JavaScript[
^]
Он выскакивает первые три даты в массиве, чтобы показать, что он работает.
Выглядит как:
https://i.stack.imgur.com/n2nn3.png[
^]
После этого я добавил функцию daysBetween() :
function daysBetween ( date1, date2 )
{
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
return dayDifference = Math.ceil(timeDiff / (1000 * 3600 * 24));
}
Затем я заставляю метод test() вызывать и это тоже на двух датах.
alert(daysBetween(dateArr[0], dateArr[3]))
Попробуйте это в jsbin.
Вот увидишь :
https://i.stack.imgur.com/awk1Q.png[
^]
Окончательный Код
function calculateFinalArray(dateArr){
var dayCounts = "";
for (var x = 0; x < dateArr.length-1;x++)
{
dayCounts += daysBetween(dateArr[x],dateArr[x+1]) + ":";
}
alert(dayCounts);
}
Выглядит это так: (список с разделителями точек с запятой можно изменить):
https://i.stack.imgur.com/tSm0H.png[
^]
Member 14013562
Спасибо, что ответили. Я думаю, вы неправильно поняли мой вопрос. Я уже создаю массив дат. Я пытаюсь найти количество дней между каждым из этих месяцев. Допустим, есть 30 дней между октябрем и ноябрем, 30 дней между ноябрем и декабрем и так далее. Мне нужно создать массив с количеством дней. Пример: [30,30,31...и так далее]
raddevus
я обновил код, доп.. Попытался сделать это до комментария, но опоздал. :)
Member 14013562
Да. Но это будет только общее количество дней между датой начала и датой окончания. То, что я хочу показать, - это то, как мы получаем эту сумму. Поэтому вместо того, чтобы делать в общей сложности 93 дня, мне нужен массив с датами между каждым из этих месяцев. [31,30,31 и так далее].
У меня есть функция, которая вычисляет это. Я только что отредактировал свой код. Не знаю, как это использовать с этим кодом.
raddevus
Хорошо, достаточно просто, я обновил сценарий-обновил свою запись, чтобы показать код. Вы можете зайти в jsbin и посмотреть окончательный код. Вам нужно будет убедиться, что вы закрыли вкладку, на которую она была ранее загружена, а затем открыли ссылку в новой вкладке вашего браузера, чтобы обеспечить обновление.
Member 14013562
Это сработало. Большое вам спасибо! :)
Когда я пытаюсь вычислить дни между 10/8/2018 и 11/8/2019, он говорит 0. Кроме того, массив каждый раз сокращается на 1 счет. Почему он это делает?
Рейтинг:
0
Richard MacCutchan
Вы можете использовать разницу между двумя датами, деленную на количество миллисекунд в сутках. Вычитая одно из другого вы можете вычислить количество дней между ними следующим образом:
function myFunction() {
var startValue = new Date(2018,9,9,0,0,0,0);
var endValue = new Date(2018,10,9,0,0,0,0);
var days = (endValue - startValue) / (1000 * 60 * 60 * 24);
}
Обратите внимание, что месяцы находятся в диапазоне от 0 до 11, а не от 1 до 12. Таким образом, вышеизложенное вычисляет количество дней между 9 октября и 9 ноября.