Javascript 获取未来三个月的星期日列表
我需要一份未来三个月的星期日清单。我写了一个函数,一直工作到今天。从今天开始的三个月是一月,也就是0,所以我的for循环不起作用Javascript 获取未来三个月的星期日列表,javascript,Javascript,我需要一份未来三个月的星期日清单。我写了一个函数,一直工作到今天。从今天开始的三个月是一月,也就是0,所以我的for循环不起作用 function getSundays(year) { const offdays = []; let i = -1; const currentDate = new Date(); currentDate.setDate(currentDate.getDate() + 90); for ( let month = new Date().getMo
function getSundays(year) {
const offdays = [];
let i = -1;
const currentDate = new Date();
currentDate.setDate(currentDate.getDate() + 90);
for ( let month = new Date().getMonth(); month < currentDate.getMonth(); month += 1) {
const tdays = new Date(year, month, 0).getDate();
for (let date = 1; date <= tdays; date += 1) {
const smonth = (month < 9) ? `0${month + 1}` : month + 1;
const sdate = (date < 10) ? `0${date}` : date;
const dd = `${year}-${smonth}-${sdate}`;
const day = new Date();
day.setDate(date);
day.setMonth(month);
day.setFullYear(year);
if (day.getDay() === 0 ) {
offdays[i += 1] = dd;
}
}
}
return offdays;
}
函数getSundays(年){
常闭日=[];
设i=-1;
const currentDate=新日期();
currentDate.setDate(currentDate.getDate()+90);
对于(月份=新日期().getMonth();月份<当前日期.getMonth();月份+=1){
const tdays=新日期(年、月、0).getDate();
对于(让date=1;date请测试下面的代码)
var startDate=新日期(2018,0,1);
var endDate=新日期(2018年11月31日);
var日=0;
对于(i=0;i m.format('LLLL'));
console.log(result.map(m=>m.format('YYYY-MM-DD'));
假设每月大约有4个星期天
函数getSundays(){
常数星期日=[];
var sunday=新日期()
sunday.setDate(sunday.getDate()+7-sunday.getDay());
对于(变量i=0;i<12;i++){
console.log(sunday.tolocalString());
sundays.push(新日期(sunday.getTime());
sunday.setDate(sunday.getDate()+7);
}
星期日返回;
}
getSundays();
如果您想要一种基于非momentjs的方法,也许您可以这样做
此方法一次递增一天,在未来三个月内继续,并查找getDay()==0
(即星期日)的任何日期实例
增量是通过毫秒
完成的,这是一种为特定日期/月/年创建日期对象的方便方法。月计数器跟踪当前日期
和下一个日期
之间的月/年变化,以确定是否应增加月计数器:
函数getSundays(年){
var start=新日期();
开始。设置年份(年);
var startEpoch=start.valueOf();
var dayDuration=86400000;//一天中的毫秒数
var currentEpoch=startEpoch;
var offdays=[];
//根据需要从开始迭代三个月
对于(var monthCounter=0;monthCounter<3;){
var currentDate=新日期(currentEpoch);
var nextDate=新日期(当前历元+日持续时间);
//如果下个月或下一年从
//当前月份或年份,然后递增月份计数器
如果(nextDate.getMonth()>currentDate.getMonth()||
nextDate.getYear()>currentDate.getYear()){
monthCounter++;
}
如果(currentDate.getDay()==0){
offdays.push(当前日期);
}
currentEpoch+=日持续时间;
}
休息日返回;
}
console.log(getSundays(2018).map(date=>date.toString());
您可以使用date get | setMonth和get | setDay的方法进行设置,例如:
const next=新日期()
next.setMonth((新日期()).getMonth()+1)
康斯特所有星期日=[]
const sundaysByMonth=[]
对于(让我=0;我看了一些已经给出的答案,它们似乎很接近,激发了我在不使用moment.js的情况下进行拍摄的灵感-大量评论,希望能够解释它,但它有助于我对问题的理解,尽管您可能需要为您的目的塑造结果
值,但它包含您需要的内容需要,我相信
函数GetSundaySforNextCalendarmons(numberOfMonths,dateVal){
让trackingObj={};//我们将使用此对象在循环中按月跟踪trackingObj。
让result=[];//我们将在这里推送每次迭代的日期,而不是在本例的结果上创建映射函数。无论如何,这可能有些过分,此数组不应包含超过15天的时间
如果(!dateVal){
dateVal=new Date();//将日期初始化为今天或从哪里开始
}
//在循环的第一次使用今天的日期作为参考,我们会找出它离星期天有多远,然后在UNIX时间中添加一天中时间(以毫秒为单位)的差值
//但首先,我们还将时间设置为凌晨2点,以避免夏令时在一段时间内出现上下移动的情况
dateVal.setHours(2);
dateVal.setTime(dateVal.getTime()+(7-dateVal.getDay())*(24*60*60*1000));//在星期日之后将dateVal改为现在相等
push(dateVal.toDateString());
//理论上,这个循环在迭代之前会中断,因为在3个月内你不会有15个星期天,但是我删除了while循环,因为它更容易确定循环的运行时间
对于(设i=0;i 控制台日志(GetSundaySforNextCalendarmons(3))
为什么要使用const
?@Raptor它没有被重新分配,将其更改为let不会改变结果对于这样的事情,您可能会发现使用适当的日期库更容易,例如矩。JS@Raptor这有一个lint规则。知道某些东西不会被重新分配可以使遵循代码更容易,或者正如链接所解释的const declaration告诉读者,“这个变量永远不会被重新分配”,从而减少认知负载并提高可维护性。
你能帮助我们理解这个问题是如何衡量“未来三个月的星期日”的吗?这是一个很好的警告,MomentJS的日期非常棒,但它也是一个大库,最新版本是64.2K缩小版和gzip