Использование Javascript для автоматической корректировки даты на 2-ю субботу каждого месяца? - PullRequest
1 голос
/ 01 февраля 2011

Мне нужен код Javascript для веб-сайта, чтобы автоматически корректировать дату. Цель состоит в том, чтобы код автоматически корректировал следующую инструкцию, чтобы она была второй субботой каждого месяца с настоящего момента до вечности:


Следующее членское собрание: Суббота, МЕСЯЦ, ДЕНЬ, ГОД 11 утра до полудня.

У кого-нибудь есть идея? Очень ценится!

Ответы [ 3 ]

7 голосов
/ 02 февраля 2011

Эта функция даст вам объект даты, вы можете извлечь из него то, что вам нужно:

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));
0 голосов
/ 02 февраля 2011

Итак, я полагаю, что суть вашей проблемы заключается в следующем: откуда мне знать, что такое вторая суббота каждого месяца?

Не проверено, но это то, что я придумал:любой 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. 
    }

2-я неделя находится в диапазоне 14 дней в месяце.

Мы можем:

сначала вычесть смещение для дня недели, с которого начинается этот месяц,

, затем секунду:

мы можем вычестьсмещение для дня недели, который мы ищем.(это должно быть смещение дней , поэтому суббота - это смещение 0 (ноль). Мы получаем это значение из абсолютного значения n-го дня минус количество дней в неделе.

Это дает нам дату второй субботы.

Тогда, поскольку у вас есть несколько целых чисел, вы можете сделать простое сравнение со значениями.

Если мы до второй субботы,отобразить это, если не рассчитать новую дату для следующего месяца.

Надеюсь, это поможет.

0 голосов
/ 01 февраля 2011

Я не тестировал, но вот основы:

//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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...