var range = getDates(new Date(), new Date().addDays(7));
我想“范围”是一个日期对象的数组,一个为两个日期之间的每一天。
诀窍在于它还应该处理月份和年份的边界。
var range = getDates(new Date(), new Date().addDays(7));
我想“范围”是一个日期对象的数组,一个为两个日期之间的每一天。
诀窍在于它还应该处理月份和年份的边界。
当前回答
D3js提供了很多方便的函数,包括d3。是时候简单地处理日期了
https://github.com/d3/d3-time
针对您的具体要求:
Utc
var range = d3.utcDay.range(new Date(), d3.utcDay.offset(new Date(), 7));
或当地时间
var range = d3.timeDay.range(new Date(), d3.timeDay.offset(new Date(), 7));
Range将是一个日期对象数组,它位于每一天的第一个可能值上
您可以将timeDay更改为timeHour, timmonth等,在不同的间隔上获得相同的结果
其他回答
我使用简单的while循环来计算日期之间
var start = new日期("01/05/2017"); var end = new Date("06/30/2017"); var newend = end.setDate(end.getDate()+1); 日期(新结束); While (start < end){ console.log(new Date(start).getTime() / 1000);// Unix时间戳格式 console.log(开始);// ISO日期格式 var newDate = start.setDate(start.getDate() + 1); start = newDate (newDate); }
getDates = (from, to) => {
const cFrom = new Date(from);
const cTo = new Date(to);
let daysArr = [new Date(cFrom)];
let tempDate = cFrom;
while (tempDate < cTo) {
tempDate.setUTCDate(tempDate.getUTCDate() + 1);
daysArr.push(new Date(tempDate));
}
return daysArr;
}
我在使用上面的答案时遇到了麻烦。由于当地夏令时(DST)导致时区偏移,日期范围丢失了一天。我实现了一个使用UTC日期的版本,解决了这个问题:
函数daterrange (startDate, endDate, steps = 1) { const dateArray = []; let currentDate = new Date(startDate); while (currentDate <=新日期(endDate)) { dateArray。推动(新日期(currentDate)); //使用UTC日期防止时区和夏令时出现问题 currentDate.setUTCDate() + steps); } 返回dateArray; } const dates = dateRange('2020-09-27', '2020-10-28'); console.log(日期);
注意:是否应用了某个时区或DST,完全取决于您的地区。忽略这一点通常不是一个好主意。使用UTC日期可以缓解大多数与时间相关的问题。
好处:您可以使用可选的steps参数设置要创建时间戳的时间间隔。如果你想要每周的时间表,将步骤设置为7。
这可能会帮助到一些人,
您可以从中获得行输出,并根据需要格式化row_date对象。
var from_date = '2016-01-01';
var to_date = '2016-02-20';
var dates = getDates(from_date, to_date);
console.log(dates);
function getDates(from_date, to_date) {
var current_date = new Date(from_date);
var end_date = new Date(to_date);
var getTimeDiff = Math.abs(current_date.getTime() - end_date.getTime());
var date_range = Math.ceil(getTimeDiff / (1000 * 3600 * 24)) + 1 ;
var weekday = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
var dates = new Array();
for (var i = 0; i <= date_range; i++) {
var getDate, getMonth = '';
if(current_date.getDate() < 10) { getDate = ('0'+ current_date.getDate());}
else{getDate = current_date.getDate();}
if(current_date.getMonth() < 9) { getMonth = ('0'+ (current_date.getMonth()+1));}
else{getMonth = current_date.getMonth();}
var row_date = {day: getDate, month: getMonth, year: current_date.getFullYear()};
var fmt_date = {weekDay: weekday[current_date.getDay()], date: getDate, month: months[current_date.getMonth()]};
var is_weekend = false;
if (current_date.getDay() == 0 || current_date.getDay() == 6) {
is_weekend = true;
}
dates.push({row_date: row_date, fmt_date: fmt_date, is_weekend: is_weekend});
current_date.setDate(current_date.getDate() + 1);
}
return dates;
}
https://gist.github.com/pranid/3c78f36253cbbc6a41a859c5d718f362.js
不是最短的,而是简单的,不可变的,没有依赖关系
function datesArray(start, end) {
let result = [], current = new Date(start);
while (current <= end)
result.push(current) && (current = new Date(current)) && current.setDate(current.getDate() + 1);
return result;
}
使用
函数datesArray(start, end) { let result = [], current = new Date(start); While (current <= end) result.push(current) && (current = new Date(current)) && current. setdate (current. getdate () + 1); 返回结果; } / /使用 const test = datesArray( 新的日期(“2020-02-26”), 新日期(“2020-03-05”) ); 对于(设I = 0;I < test.length;I ++) { console.log ( 测试[我].toISOString () .slice (0, 10) ); }