使用Javascript自动调整日期到每个月的第二个星期六?

时间:2011-02-01 19:29:39

标签: javascript object date

我需要网站的Javascript代码才能自动调整日期。目标是让代码自动将以下语句调整为从现在起到永恒的每个月的第二个星期六:

<小时/> 下一次会员会议:星期六,每月,每年,每年上午11点到中午。


有人有想法吗?非常感谢!

3 个答案:

答案 0 :(得分:7)

此功能将为您提供日期对象,您可以从中获取所需内容:

var getMeeting = function(year, month){
    var date = new Date(year, month, 1, 0, 0, 0, 0);
    date.setDate(14-date.getDay());
    return date;
};


alert(getMeeting(2011,5));

答案 1 :(得分:0)

我没有测试,但这是基础知识:

//our main code
var Months = ["Jan", "Feb", "Mar", /*... you finish... */ ];
var meetingDate = getMonthlyMeeting();
document.Write( "<i>Next membership meeting:</i> Saturday, " + Months[meetingDate.getMonth()] + ", " + meetingDate.getDay() + ", " + meetingDate.getYear() + " 11 a.m. to noon.");



// call this to get the monthly meeting date
// returns a Date() object
function getMonthlyMeeting(){
var today = new Date(); //JS automatically initializes new Date()s to the current time

//first, see if today is our meeting day
var meetingDate;
var thisMonthsMeeting = getSecondTuesdayInMonth(today.getMonth(), today.getYear());
if( thisMonthsMeeting.getDay() == today.getDay() ){
  // today is our meeting day!
  meetingDate = today;
}
else {
 if  ( today.getDay() < thisMonthsMeeting.getDay() ){
   // it hasn't happened this month yet
   meetingDate = thisMonthsMeeting;
 } else {
   //this month's meeting day has already passed
   if( today.getMonth() == 11 ){
        // rolling over to the next year
        meetingDate = getSecondTuesdayInMonth(0, today.getYear() + 1);
   } else {
        meetingDate = getSecondTuesdayInMonth(today.getMonth() + 1, today.getYear());
   }
 }
}
return meetingDate;
}

// this is a helper function to get the second tuesday in any month
// returns a Date() object
function getSecondTuesdayInMonth(var month, var year){
var saturdays = 0;
var testDay= new Date();
while( testDay.getDay() != 2 && saturdays < 2 ){
  //while the day we are testing isnt tuesday (2) and we haven't found it twice
  if( testDay.getDay() == 2 )
    saturdays = saturdays + 1; //we found a saturday
  testDay= new Date(testDay.getTime() + 86400000); //increment our day to the next day
}
//when we finish the while loop, we are on our day
return testDay;
}

答案 2 :(得分:0)

所以,我认为问题的关键是:我怎么知道每个月的第二个星期六是什么?

未经测试,但这是我提出的: 它是在任何月份的任何第n天抽象的。

    nthDate = function(nth_week, nth_day, month){
        var src_date = new Date();

        src_date.setDate(1);
        src_date.setMonth(month);

        return ( (nth_week * 7) - src_date.getDay() ) - ( Math.abs( nth_day - 6) );
    };

    var cur_date = new Date();

    var cur_day = cur_date.getDay();

    //2 for the 2nd week of the month
    //6 is the integer value for saturday (days of the week 0-6)
    var nth_date = nthDate( 2, 6, cur_date.getMonth() );

    if(cur_day < nth_date){
       //display the upcoming date here
    }else if( cur_day  > nth_date){
       //figure out next month's date and display that
       var next_date = nthDate(2, 6, (cur_date.getMonth() +1) );
       //does this deal with the case of the month being december?? not sure. 
    }

第二周是该月的14天。

我们可以:

首先减去本月开始的星期几的偏移量,

然后第二个:

我们可以减去我们正在寻找的星期几的偏移量。 (这需要是天数的偏移,所以星期六是0(零)偏移。我们从第n天的绝对值减去一周中的天数得到这个值。

这给了我们第二个星期六的日期。

然后,因为你有一些整数,你可以对这些值进行简单的比较。

如果我们在第二个星期六之前,请显示,如果不计算下个月的新日期。

希望有所帮助。