如何用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

+1

一个月可以有5个星期一。就像当前月份一样(2012年2月)。 – pduersteler 2012-02-28 11:38:54

+1

好吧,2012年2月确实只有4个星期一,6日,13日,20日和27日(昨天)。它开始于星期三,结束于星期三..但我同意,一个月可能有5个星期一如2012年4月。是的,我必须记住这一事实,当我的代码 – Gaelle 2012-02-28 11:53:54

+0

被我自己的日历困惑时,我很抱歉。 – pduersteler 2012-02-28 12:08:32

以下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; 
} 
+0

谢谢杰克拉克森,它解决了问题! – Gaelle 2012-02-28 12:54:11

+0

很高兴帮助:-) – jabclab 2012-02-28 12:54:33

这将返回本月[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