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

新手上路,请多包涵

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

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

原文由 user18577 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 846
2 个回答

如果你不想用外部库来做,你应该使用时间戳。我创建了一个解决方案,您可以从当前日期减去 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));

原文由 hereandnow78 发布,翻译遵循 CC BY-SA 3.0 许可协议

得到本周的星期一减去 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 是十二月)。还:

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

d.setDate(d.getDate() - 30);  // 2012-09-30

原文由 RobG 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题