我需要最快的方法得到一周的第一天。例如:今天是11月11日,是星期四;我想要这周的第一天,也就是11月8日,一个星期一。我需要MongoDB映射函数的最快方法,有什么想法吗?


当前回答

一周的第一天/最后一天

为了得到即将到来的一周的第一天,你可以这样使用:

函数getUpcomingSunday() { const date = new date (); const today = date.getDate(); const currentDay = date.getDay(); const newDate =日期。setDate(今天- currentDay + 7); return newDate (newDate); } console.log (getUpcomingSunday ());

或者获得最晚的第一天:

函数getLastSunday() { const date = new date (); const today = date.getDate(); const currentDay = date.getDay(); const newDate =日期。setDate(今天- (currentDay || 7)); return newDate (newDate); } console.log (getLastSunday ());

*根据您所在的时区,一周的开始不必从周日开始,它可以从周五、周六、周一或您的机器设置的任何其他日子开始。这些方法可以解释。

*你也可以像这样使用toISOString方法格式化它:

其他回答

该函数使用当前毫秒时间减去当前周,如果当前日期是周一,则再减去一周(javascript从周日开始计数)。

function getMonday(fromDate) {
    // length of one day i milliseconds
  var dayLength = 24 * 60 * 60 * 1000;

  // Get the current date (without time)
    var currentDate = new Date(fromDate.getFullYear(), fromDate.getMonth(), fromDate.getDate());

  // Get the current date's millisecond for this week
  var currentWeekDayMillisecond = ((currentDate.getDay()) * dayLength);

  // subtract the current date with the current date's millisecond for this week
  var monday = new Date(currentDate.getTime() - currentWeekDayMillisecond + dayLength);

  if (monday > currentDate) {
    // It is sunday, so we need to go back further
    monday = new Date(monday.getTime() - (dayLength * 7));
  }

  return monday;
}

当一周从一个月延伸到另一个月(也包括几年)时,我对它进行了测试,它似乎可以正常工作。

周一上午00点到周一上午00点返回。

const now = new Date()
const startOfWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() + 1)
const endOfWeek = new Date(now.getFullYear(), now.getMonth(), startOfWeek.getDate() + 7)

setDate()在月份边界上有问题,在上面的注释中已经注意到。一个简单的解决方法是使用epoch时间戳来查找日期差异,而不是使用date对象上的方法(令人惊讶地违反直觉)。即。

function getPreviousMonday(fromDate) {
    var dayMillisecs = 24 * 60 * 60 * 1000;

    // Get Date object truncated to date.
    var d = new Date(new Date(fromDate || Date()).toISOString().slice(0, 10));

    // If today is Sunday (day 0) subtract an extra 7 days.
    var dayDiff = d.getDay() === 0 ? 7 : 0;

    // Get date diff in millisecs to avoid setDate() bugs with month boundaries.
    var mondayMillisecs = d.getTime() - (d.getDay() + dayDiff) * dayMillisecs;

    // Return date as YYYY-MM-DD string.
    return new Date(mondayMillisecs).toISOString().slice(0, 10);
}

我用这个:

let current_date = new Date();
let days_to_monday = 1 - current_date.getDay();
monday_date = current_date.addDays(days_to_monday);

// https://stackoverflow.com/a/563442/6533037
Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

它工作得很好。

查看Date.js

Date.today().previous().monday()