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


当前回答

使用Date对象的getDay方法,您可以知道一周中的天数(0=星期日,1=星期一,等等)。

然后你可以用这个天数加1,例如:

function getMonday(d) {
  d = new Date(d);
  var day = d.getDay(),
      diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
  return new Date(d.setDate(diff));
}

getMonday(new Date()); // Mon Nov 08 2010

其他回答

var dt = new Date(); // current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay - 1;
var wkStart = new Date(new Date(dt).setDate(dt.getDate() - lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));

这将会很有效。

使用Date对象的getDay方法,您可以知道一周中的天数(0=星期日,1=星期一,等等)。

然后你可以用这个天数加1,例如:

function getMonday(d) {
  d = new Date(d);
  var day = d.getDay(),
      diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
  return new Date(d.setDate(diff));
}

getMonday(new Date()); // Mon Nov 08 2010

CMS的答案是正确的,但假设星期一是一周的第一天。 钱德勒·兹沃勒的答案是正确的,但摆弄了日期原型。 其他加/减小时/分钟/秒/毫秒的答案是错误的,因为不是所有的日子都有24小时。

下面的函数是正确的,它将日期作为第一个参数,将所需的一周第一天作为第二个参数(0表示周日,1表示周一,等等)。注意:小时、分、秒设置为0才有一天的开始。

function firstDayOfWeek(dateObject, firstDayOfWeekIndex) { const dayOfWeek = dateObject.getDay(), firstDayOfWeek = new Date(dateObject), diff = dayOfWeek >= firstDayOfWeekIndex ? dayOfWeek - firstDayOfWeekIndex : 6 - dayOfWeek firstDayOfWeek.setDate(dateObject.getDate() - diff) firstDayOfWeek.setHours(0,0,0,0) return firstDayOfWeek } // August 18th was a Saturday let lastMonday = firstDayOfWeek(new Date('August 18, 2018 03:24:00'), 1) // outputs something like "Mon Aug 13 2018 00:00:00 GMT+0200" // (may vary according to your time zone) document.write(lastMonday)

更普遍的说法是……这将根据您指定的日期给出当前一周中的任何一天。

//返回一周中的相对日期0 = Sunday, 1 = Monday…6 =星期六 函数getRelativeDayInWeek(d,dy) { d = new日期(d); var day = d.getDay(), diff = d.getDate() - day + (day == 0 ?6: dy);//当白天是星期天时进行调整 (d.setDate(diff)); } var monday = getRelativeDayInWeek(new Date(),1); var friday = getRelativeDayInWeek(new Date(),5); console.log(星期一); console.log(周五);

该函数使用当前毫秒时间减去当前周,如果当前日期是周一,则再减去一周(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;
}

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