在 JavaScript 中获取给定日期范围内所有日期的列表
Getting a list of all dates within a given date range in JavaScript
我正在尝试弄清楚是否有任何可用的辅助函数或任何可能有助于获取给定日期范围内日期列表的技术。
假设用户输入以下参数,这将是 2 年合同:
天: 15
开始日期: 1/15/2015
结束日期: 12/15/2016
期间内每个月(包括开始和结束月份(的日期:
1/15/2015
2/15/2015
3/15/2015
.....
1/15/2016
2/15/2016
3/15/2016
.....
12/15/2016
编辑:正如@RobG评论中所说,我在示例中使用这样的日期格式犯了一个错误:
2015-12-01
。并非所有浏览器都解释使用"-"的日期格式。最好改用"/"字符。
您需要使用setMonth
和getMonth
方法:
var start = new Date("2015/01/15");
var end = new Date("2016/12/15");
while (start <= end) {
console.log( new Date(start) );
start.setMonth( start.getMonth() + 1 );
}
斯菲德尔
更动态的解决方案:
function getDatesBtween(from, to, day){
var from = new Date(from),
to = new Date(to),
dates = [];
from.setDate(day);
to.setDate(day);
while(from <= to){
dates.push(new Date(from));
from.setMonth( from.getMonth() + 1 );
}
return dates;
}
var dates = getDatesBtween("2015/01/15", "2016/12/15", 15);
console.log(dates);
斯菲德尔
编辑 2 正如@HBP在评论中提到的,上述解决方案没有考虑边缘情况,并且不适用于一个月的最后几天(每月的第 29、30 和 31 天(。例如,
2015/02/31
= 在某些情况下2015/03/03
,在其他情况下(闰年(2015/03/02
。下一个解决方案解决了这个问题:
function DateManager(){
// Create a date with specific day
function setDate(date, day){
date = new Date(date);
date.setDate(day);
date.setHours(23);
return date;
}
// Generate dates method
this.getDatesBetween = function(date1, date2, day){
var range1 = new Date(date1),
range2 = new Date(date2),
date1 = setDate(date1, day),
date2 = setDate(date2, day),
dates = [],
temp = null;
while(date1 <= date2){
if(date1.getDate() != day){
temp = setDate(date1, 0);
if(temp >= range1 && temp <= range2) dates.push(temp);
date1 = setDate(date1, day);
}else{
temp = new Date(date1);
if(temp >= range1 && temp <= range2) dates.push(temp);
date1.setMonth( date1.getMonth() + 1 );
}
}
return dates;
};
}
var manager = new DateManager();
var dates = manager.getDatesBetween("2015/01/15", "2016/12/15", 31);
console.log(dates);
结果将是这样的:
2015/01/31
2015/02/28
2015/03/31
2015/04/30
2015/05/31
...
2016/02/29
...
2016/11/30
斯菲德尔
$("#from").datepicker();
$("#to").datepicker();
$('#getBetween').on('click', function () {
var start = $("#from").datepicker("getDate"),
end = $("#to").datepicker("getDate"),
currentDate = new Date(start),
between = []
;
while (currentDate <= end) {
between.push(new Date(currentDate));
currentDate.setMonth(currentDate.getMonth() + 1);
}
$('#results').html(between.join('<br> '));
});
<link href="http://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<input id="from" />
<input id="to" />
<button id="getBetween">Get Between Dates</button>
<div id="results"></div>
我认为getDate(( + 1应该能够解决边界条件。
var startDate = new Date("2020-02-01"); //YYYY-MM-DD
var endDate = new Date("2020-03-07"); //YYYY-MM-DD
var getDateArray = function(start, end) {
var arr = new Array();
var dt = new Date(start);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var dateArr = getDateArray(startDate, endDate);
// Output
document.write("Start Date: " + startDate + "<br>");
document.write("End Date: " + endDate + "<br>");
document.write("Date Array<br>")
for (var i = 0; i < dateArr.length; i++) {
document.write(dateArr[i] + "<br>");
}
相关文章:
- 基于日期范围的一组日期范围内的天数
- 查找某个日期范围内的可用天数
- JS日期对象在某个范围内的百分比
- 生成时间戳日期|Javascript范围内的空数据
- 在日期范围内查找丢失日期的最有效方法是什么
- Jquery日期选择器-防止选择范围内的不可用日期
- jQuery:检索日期选择器日期,检查是否在日期范围内,显示/隐藏字段
- 自定义 Angular 日期范围过滤器,以仅显示该日期范围内的项目
- 计算给定日期范围内的星期一
- 使用 javascript 获取仅在日期范围内显示的数据
- 角度 ng 显示日期在时间范围内或不从
- Javascript 时刻在日期范围内 api
- 在 JavaScript 中获取给定日期范围内所有日期的列表
- angular - 过滤开始日期和结束日期在所选月份和年份范围内的所有对象
- 如何检查数组中的任何日期是否在日期范围内
- 使用javascript验证用户输入日期是否在给定的日期范围内
- 按钮应在特定日期范围内活动
- 在日期范围内创建的每一行插入日期,从startDate开始,递增到结束日期
- 以月为单位计算给定日期范围内的天数,使用momentjs计算天数
- 获取日期范围内的epoch时间戳列表