4

ユーザーからの入力は次のとおりです。

年 = 2011、月 = 3 (3 月)、週 = 2

2011 年 3 月の第 2 週の日付を JavaScript で取得したいと考えています。

例:6日日曜日、7日月曜日、8日火曜日、9日水曜日、10日木曜日、11日金曜日、12日土曜日

何か案は?ありがとう!

4

4 に答える 4

8

与えられた

var year = 2011;
var month = 3;
var week = 2;

var firstDateOfMonth = new Date(year, month - 1, 1); // Date: year-month-01

var firstDayOfMonth = firstDateOfMonth.getDay();     // 0 (Sun) to 6 (Sat)

var firstDateOfWeek = new Date(firstDateOfMonth);    // copy firstDateOfMonth

firstDateOfWeek.setDate(                             // move the Date object
    firstDateOfWeek.getDate() +                      // forward by the number of
    (firstDayOfMonth ? 7 - firstDayOfMonth : 0)      // days needed to go to
);                                                   // Sunday, if necessary

firstDateOfWeek.setDate(                             // move the Date object
    firstDateOfWeek.getDate() +                      // forward by the number of
    7 * (week - 1)                                   // weeks required (week - 1)
);

var dateNumbersOfMonthOnWeek = [];                   // output array of date #s
var datesOfMonthOnWeek = [];                         // output array of Dates

for (var i = 0; i < 7; i++) {                        // for seven days...

    dateNumbersOfMonthOnWeek.push(                   // push the date number on
        firstDateOfWeek.getDate());                  // the end of the array

    datesOfMonthOnWeek.push(                         // push the date object on
        new Date(+firstDateOfWeek));                 // the end of the array

    firstDateOfWeek.setDate(
        firstDateOfWeek.getDate() + 1);              // move to the next day

}

それから

  • dateNumbersOfMonthOnWeekその週の日付番号が表示されます。
  • datesOfMonthOnWeekその週の日付オブジェクトがあります。

これは仕事にとってやり過ぎのように思えるかもしれませんが、日付の数字が別の月にまたがる場合など、すべての状況で機能させるためには、これの多くが必要です。ただし、冗長になるように最適化できると確信しています。

于 2011-07-18T08:29:15.590 に答える
0

月の最初の週がその月の最初の週であると仮定すると、次の関数は、年、月、および週番号が指定された週の最初の日の日付を返します。

/* 
   Input year, month and week number from 1
   Returns first day in week (Sunday) where
   first week is the first with 1st of month in it
*/
function getFirstDayOfWeek(y, m, w) {
  var d = new Date(y, --m);
  d.setDate(--w * 7 - d.getDay() + 1);
  return d;
}

alert(getFirstDayOfWeek(2011,3, 2)); // Sun Mar 06 2011

残りの日数を取得するには、6 回ループして、毎回日付に 1 を追加します。

function getWeekDates(y, m, w) {
  var d = getFirstDayOfWeek(y, m, w)
  var week = [new Date(d)];
  var i = 6;
  while (i--) {
    week.push(new Date(d.setDate(d.getDate() + 1)));
  }
  return week;
}

// Show week of dates
var week = getWeekDates(2011,3, 2);
for (var i=0, iLen=week.length; i<iLen; i++) {
  alert(week[i]);
}
于 2011-07-18T09:14:18.787 に答える
0

私は通常、js での日付操作にDatejsを使用します。私は次のようにします:

var firstDayOfWeek = new Date(year,month-1,1).moveToDayOfWeek(0,-1).addWeeks(week-1);
var lastDayOfWeek = firstDayOfWeek.addDays(6);
于 2011-07-18T08:39:39.127 に答える