我需要最快的方法得到一周的第一天。例如:今天是11月11日,是星期四;我想要这周的第一天,也就是11月8日,一个星期一。我需要MongoDB映射函数的最快方法,有什么想法吗?
当前回答
周一上午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)
其他回答
更普遍的说法是……这将根据您指定的日期给出当前一周中的任何一天。
//返回一周中的相对日期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(周五);
晚上好,
我更喜欢有一个简单的扩展方法:
Date.prototype.startOfWeek = function (pStartOfWeek) {
var mDifference = this.getDay() - pStartOfWeek;
if (mDifference < 0) {
mDifference += 7;
}
return new Date(this.addDays(mDifference * -1));
}
你会注意到这实际上利用了我使用的另一个扩展方法:
Date.prototype.addDays = function (pDays) {
var mDate = new Date(this.valueOf());
mDate.setDate(mDate.getDate() + pDays);
return mDate;
};
现在,如果你的周从周日开始,为pStartOfWeek参数传递一个“0”,如下所示:
var mThisSunday = new Date().startOfWeek(0);
类似地,如果你的周从星期一开始,为pStartOfWeek参数传递一个“1”:
var mThisMonday = new Date().startOfWeek(1);
问候,
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)
扩展回答来自@Christian C. Salvadó和来自@Ayyash(对象是可变的)和@Awi和@Louis Ameline(设置时间为00:00:00)的信息
函数可以是这样的
function getMonday(d) {
var day = d.getDay(),
diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
d.setDate(diff);
d.setHours(0,0,0,0); // set hours to 00:00:00
return d; // object is mutable no need to recreate object
}
getMonday(new Date())
查看:moment.js
例子:
moment().day(-7); // last Sunday (0 - 7)
moment().day(7); // next Sunday (0 + 7)
moment().day(10); // next Wednesday (3 + 7)
moment().day(24); // 3 Wednesdays from now (3 + 7 + 7 + 7)
好处:也适用于node.js