繁体   English   中英

Javascript:获取前一周的周一和周日

[英]Javascript: get Monday and Sunday of the previous week

我正在使用以下脚本来获取前一周的星期一(第一)和星期日(最后):

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 新手,还有其他方法可以获取这些日期吗?

您可以通过获取本周的星期一并减去 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

如果你不想用外部库来做,你应该使用时间戳。 我创建了一个解决方案,您可以从当前日期中减去 60*60*24*7*1000(即 604800000,以毫秒为单位),然后从那里开始:

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));

你可以使用像 moment.js 这样的库。 subtract http://momentjs.com/docs/#/manipulating/subtract/

一些答案提到了时刻,但没有人写过这个简单的方法:

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

.day设置星期几,所以今天是哪一天并不重要,只有星期很重要。

这是 find 任何一周中任何一天的通用解决方案。

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

使用 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  );

可以这么简单。

var today = new Date();
var sunday = new Date(this.today.getFullYear(), this.today.getMonth(), this.today.getDate() - this.today.getDay());

在这里你有一个多用途的功能:

 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

您可以使用第三方日期库来处理日期。 例如:

var startOfWeek = moment().startOf('week').toDate();
var endOfWeek   = moment().endOf('week').toDate();

如果你想使用 JavaScript 然后使用下面的代码

 var curr = new Date; // get current date var first = curr.getDate() - curr.getDay()+1; // First day is the day of the month - the day of the week var last = first + 6; // last day is the first day + 6 var startDate = new Date(curr.setDate(first)); startDate = ""+startDate.getFullYear()+"-"+ (startDate.getMonth() + 1) + "-" + startDate.getDate() var endDate = new Date(curr.setDate(last)); endDate = "" + (endDate.getMonth() + 1) + "/" + endDate.getDate() + "/" + endDate.getFullYear(); alert(startDate+", "+endDate)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM