var range = getDates(new Date(), new Date().addDays(7));
Я бы хотел, чтобы «диапазон» был массивом объектов даты, по одному на каждый день между двумя датами.
Хитрость заключается в том, что он должен обрабатывать границы месяца и года.
javascript
node.js
date
datetime
date-range
Скотт Кларенбах
источник
источник
startDate
иendDate
? Потому что, еслиstartDate
время позже, чемstopDate
время, оно не будет включеноstopDate
в результат, верно?Попробуйте это, не забудьте включить момент JS,
источник
var dateArray = [];
Подробности здесьvar currentDate = moment(startDate);
если вы используете этот метод дважды в один и тот же день moment.js, вы будете удивлены, почему он работает только в первый раз. Это происходит потому, что javascripts передает объекты по ссылке, поэтому функция в конце дважды использует startDate (которая уже мутирована). Исправление вышеупомянутого исправления гарантирует, что вы работаете с новыми и уникальными моментами js объектов в области действия функции. Проверьте эту скрипкуЯ посмотрел все выше. Закончил писать сам. Вам не нужны моменты для этого . Достаточно встроенного цикла for, и оно имеет больше смысла, поскольку существует цикл for для подсчета значений в диапазоне.
Один лайнер:
Длинная версия
Список дат между:
Дни от прошедшей даты до настоящего времени:
источник
getDaysArray
? Не дни между ними.for (var arr=[], dt=new Date(start), ...)
. ;-)Я использую moment.js и Twix.js, они очень хорошо поддерживают манипуляции с датой и временем
У меня это работает на http://jsfiddle.net/Lkzg1bxb/
источник
источник
источник
Если вы используете момент, то вы можете использовать их «официальный плагин» для диапазонов
moment-range
и тогда это становится тривиальным.Пример узла диапазона моментов:
Пример браузера с диапазоном моментов:
пример даты fns:
Если вы используете,
date-fns
тоeachDay
ваш друг, и вы получите самый короткий и краткий ответ:источник
Просто наткнулся на этот вопрос, самый простой способ сделать это - использовать момент:
Сначала нужно установить момент и диапазон моментов:
источник
Некоторое время я использовал решение @Mohammed Safeer и внес несколько улучшений. Использование форматированных дат - плохая практика при работе в ваших контроллерах.
moment().format()
следует использовать только для отображения в представлениях. Также помните, что этоmoment().clone()
обеспечивает отделение от входных параметров, а это означает, что даты ввода не изменяются. Я настоятельно рекомендую вам использовать moment.js при работе с датами.Использование:
startDate
,endDate
параметровinterval
параметр является необязательным и по умолчанию устанавливается в «дни». Используйте интервалы, поддерживаемые.add()
методом (moment.js). Подробнее здесьtotal
Параметр полезен при указании интервалов в минутах. По умолчанию это 1.Invoke:
Функция:
источник
Используя ES6, вы получаете Array.from, что означает, что вы можете написать действительно элегантную функцию, которая учитывает динамические интервалы (часы, дни, месяцы).
источник
new Date(2017,12,30)
30 января 2018 года, для меня диапазон дат начинается 29 января 2018 года. Не все дни имеют продолжительность 8,64e7 мс (24 часа), когда наблюдается переход на летнее время. ;-)Я недавно работал с moment.js, после чего добился цели ..
Результат будет:
источник
источник
var
раньшеstrDate
внутри цикла while!d3js предоставляет множество удобных функций и включает d3.time для легкой манипуляции с датой
https://github.com/d3/d3-time
Для вашего конкретного запроса:
Универсальное глобальное время
или местное время
диапазон будет массивом объектов даты, которые попадают в первое возможное значение для каждого дня
Вы можете изменить timeDay на timeHour, timeMonth и т. д. для получения одинаковых результатов на разных интервалах
источник
Вот один вкладыш, который не требует никаких библиотек на тот случай, если вы не хотите создавать другую функцию. Просто замените startDate (в двух местах) и endDate (которые являются объектами даты js) вашими переменными или значениями даты. Конечно, вы можете обернуть его в функцию, если вы предпочитаете
источник
Я использую эту функцию
источник
Я использую простой цикл while для расчета между датами
источник
Примечание: я знаю, что это немного отличается от запрошенного решения, но я думаю, что многие найдут его полезным.
Если вы хотите найти каждый интервал "x" (дни, месяцы, годы и т. Д.) Между двумя датами, moment.js и диапазоном момента расширения включите эту функцию.
Например, чтобы найти каждый 30-й день между двумя датами :
источник
Создайте массив лет:
Генерация массивов за месяц:
Генерация массивов за дни:
источник
Вы можете сделать это легко с помощью momentJS
Добавьте момент к вашим зависимостям
Затем импортируйте это в свой файл
Затем используйте следующий код, чтобы получить список всех дат между двумя датами
источник
Это может помочь кому-то,
https://gist.github.com/pranid/3c78f36253cbbc6a41a859c5d718f362.js
источник
Вот стандартный метод, который будет принимать даты или строки Момента в качестве входных данных и генерировать массив дат как Моментные даты. Если вы не хотите, чтобы даты Момента выводились, измените то, что
map()
возвращает метод.источник
решение @ softvar, но затем с опцией рабочих дат
источник
Функция:
Использование:
Надеюсь, это поможет вам
источник