如何用js获得一个月的4个星期一?
问题描述:
(首先,请原谅我的英语,我是初学者)如何用js获得一个月的4个星期一?
让我解释一下这种情况:
我想创建一个使用谷歌图表工具(试一试的图表,这是非常有帮助)。 这部分是不是真的很难...
问题出现时,我有一个具体的图表需要在X轴四个星期的一个月:我想显示在屏幕上只有四个星期一在这个月。
我已经有了currentMonth和currentYear变量,我知道如何获得该月的第一天。我所需要的就是如何在一个数组中获得一个月的四个星期一。所有这些都在同一个JavaScript文件中。
我在编程逻辑中迷失了方向,我看到很多解决方案都不适合我的情况。
所以,我有什么是:
var date = new Date();
var currentYear = date.getFullYear();
var currentMonth = date.getMonth();
var firstDayofMonth = new Date(currentYear,currentMonth,1);
var firstWeekDay = firstDayofMonth.getDay();
,我想有这样的事情:
var myDates =
[new Date(firstMonday),new Date(secondMonday), new Date(thirdMonday),new Date(fourthMonday)]
感谢您的阅读,如果你能帮助我... :)
Gaelle
答
以下function
将返回所有星期一为C urrent月:
function getMondays() {
var d = new Date(),
month = d.getMonth(),
mondays = [];
d.setDate(1);
// Get the first Monday in the month
while (d.getDay() !== 1) {
d.setDate(d.getDate() + 1);
}
// Get all the other Mondays in the month
while (d.getMonth() === month) {
mondays.push(new Date(d.getTime()));
d.setDate(d.getDate() + 7);
}
return mondays;
}
答
这将返回本月[M]的
第四
最后一个星期一在一年[Y]
function lastmonday(y,m) {
var dat = new Date(y+'/'+m+'/1')
,currentmonth = m
,firstmonday = false;
while (currentmonth === m){
firstmonday = dat.getDay() === 1 || firstmonday;
dat.setDate(dat.getDate()+(firstmonday ? 7 : 1));
currentmonth = dat.getMonth()+1;
}
dat.setDate(dat.getDate()-7);
return dat;
}
// usage
lastmonday(2012,3); //=>Mon Mar 26 2012 00:00:00 GMT+0200
lastmonday(2012,2) //=>Mon Feb 27 2012 00:00:00 GMT+0100
lastmonday(1997,1) //=>Mon Jan 27 1997 00:00:00 GMT+0100
lastmonday(2012,4) //=>Mon Apr 30 2012 00:00:00 GMT+0200
更通用的,这将提供最后的任何工作日月:
function lastDayOfMonth(y,m,dy) {
var days = {sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}
,dat = new Date(y+'/'+m+'/1')
,currentmonth = m
,firstday = false;
while (currentmonth === m){
firstday = dat.getDay() === days[dy] || firstday;
dat.setDate(dat.getDate()+(firstday ? 7 : 1));
currentmonth = dat.getMonth()+1 ;
}
dat.setDate(dat.getDate()-7);
return dat;
}
// usage
lastDayOfMonth(2012,2,'tue'); //=>Tue Feb 28 2012 00:00:00 GMT+0100
lastDayOfMonth(1943,5,'fri'); //=>Fri May 28 1943 00:00:00 GMT+0200
+0
谢谢,它非常有趣,我可能会在稍后使用它 – Gaelle 2012-02-28 12:51:42
一个月可以有5个星期一。就像当前月份一样(2012年2月)。 – pduersteler 2012-02-28 11:38:54
好吧,2012年2月确实只有4个星期一,6日,13日,20日和27日(昨天)。它开始于星期三,结束于星期三..但我同意,一个月可能有5个星期一如2012年4月。是的,我必须记住这一事实,当我的代码 – Gaelle 2012-02-28 11:53:54
被我自己的日历困惑时,我很抱歉。 – pduersteler 2012-02-28 12:08:32