12

次のスクリプトを使用して、前の週の月曜日(最初)と日曜日(最後)を取得しています。

var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay() - 6; // Gets day of the month (e.g. 21) - the day of the week (e.g. wednesday = 3) = Sunday (18th) - 6
var last = first + 6; // last day is the first day + 6
var startDate = new Date(curr.setDate(first));
var endDate = new Date(curr.setDate(last));

これは、先週の月曜日と日曜日も同じ月であれば問題なく機能しますが、今日が12月で、先週の月曜日が11月の場合は、機能しないことに気付きました。

私は完全なJS初心者ですが、これらの日付を取得する別の方法はありますか?

4

8 に答える 8

27

今週の月曜日を取得し、7日を引くと、前の月曜日を取得できます。日曜日はその前日になるので、次のようになります。

var d = new Date();

// set to Monday of this week
d.setDate(d.getDate() - (d.getDay() + 6) % 7);

// set to previous Monday
d.setDate(d.getDate() - 7);

// create new date of day before
var sunday = new Date(d.getFullYear(), d.getMonth(), d.getDate() - 1);

2012-12-03の場合:

Mon 26 Nov 2012
Sun 25 Nov 2012

それはあなたが望むものですか?

// Or new date for the following Sunday
var sunday = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 6);

これは

Sun 02 Dec 2012

一般に、年、月、日を加算および減算することにより、日付オブジェクトを操作できます。オブジェクトは負の値を自動的に処理します。例:

var d = new Date(2012,11,0)

2012-11-30の日付を作成します(月はゼロベースであるため、11は12月であることに注意してください)。また:

d.setMonth(d.getMonth() - 1); // 2012-10-30

d.setDate(d.getDate() - 30);  // 2012-09-30
于 2012-12-03T11:13:23.290 に答える
7

外部ライブラリでそれを行いたくない場合は、タイムスタンプを使用する必要があります。現在の日付から60*60 * 24 * 7 * 1000(604800000、ミリ秒単位で1週間)を差し引いてそこから移動するソリューションを作成しました。

var beforeOneWeek = new Date(new Date().getTime() - 60 * 60 * 24 * 7 * 1000)
  , day = beforeOneWeek.getDay()
  , diffToMonday = beforeOneWeek.getDate() - day + (day === 0 ? -6 : 1)
  , lastMonday = new Date(beforeOneWeek.setDate(diffToMonday))
  , lastSunday = new Date(beforeOneWeek.setDate(diffToMonday + 6));
于 2012-12-03T11:19:06.300 に答える
4

moment.jsのようなライブラリを使用できます。subtractメソッドhttp://momentjs.com/docs/#/manipulating/subtract/を参照してください

于 2012-12-03T11:01:09.467 に答える
3

いくつかの答えは瞬間について言及しましたが、誰もこの単純な方法について書いていません:

moment().day(-13) // Monday last week
moment().day(-7) // Sunday last week

.day曜日を設定するので、今日が何日であるかは関係ありません。重要なのは週だけです。

于 2016-06-12T10:45:26.693 に答える
2

これは、任意の曜日を検索する一般的なソリューションです。

function getParticularDayTimestamp(lastWeekDay) {
  var currentWeekMonday = new Date().getDate() - new Date().getDay() + 1;
  return new Date().setDate(currentWeekMonday - lastWeekDay);
}

console.log(getParticularDayTimestamp(7)) // for last week monday
console.log(getParticularDayTimestamp(1)) // for last week sunday
console.log(getParticularDayTimestamp(14)) // for last to last week monday
console.log(getParticularDayTimestamp(8)) // for last to last week sunday
于 2020-01-29T06:03:21.623 に答える
1

Momentを使用すると、次のことができます

  var lastWeek          = moment().isoWeek(moment().subtract(1,'w').week());
  var mondayDifference  = lastWeek.dayOfYear() - lastWeek.weekday() + 1;
  var sundayDifference  = mondayDifference - 1;

  var lastMonday        = moment().dayOfYear(mondayDifference);
  var lastSunday        = moment().dayOfYear(sundayDifference  );
于 2016-01-21T22:53:05.657 に答える
1

これは簡単なことです。

var today = new Date();
var sunday = new Date(this.today.getFullYear(), this.today.getMonth(), this.today.getDate() - this.today.getDay());
于 2019-03-21T16:39:19.140 に答える
0

ここに多目的機能があります:

 function getThe(numOfWeeks, weekday, tense, fromDate) { 
 // for instance: var lastMonday = getThe(1,"Monday","before",new Date()) 
      var targetWeekday = -1;  
      var dateAdjustment = clone(fromDate);  
      var result = clone(fromDate);

      switch (weekday) {
        case "Monday": targetWeekday = 8; break;
        case "Tuesday": targetWeekday = 2; break;
        case "Wednesday": targetWeekday = 3; break;
        case "Thursday": targetWeekday = 4; break;
        case "Friday": targetWeekday = 5; break;
        case "Saturday": targetWeekday = 6; break;
        case "Sunday": targetWeekday = 7;
      }

      var adjustment = 7 * (numOfWeeks - 1);
      if (tense == "after") adjustment = -7 * numOfWeeks;

      dateAdjustment.setDate(fromDate.getDate() - targetWeekday);
      var weekday = dateAdjustment.getDay();

      result.setDate(fromDate.getDate() - weekday - adjustment);
      result.setHours(0,0,0,0);
      return result;
  }

次の投稿で「clone(obj)」関数を見つけることができます:https ://stackoverflow.com/a/728694/6751764

于 2016-09-05T09:10:33.817 に答える