我需要最快的方法来获得一周的第一天。例如:今天是11月11日,星期四;我想要本周的第一天,也就是 11 月 8 日,还有一个星期一。我需要 MongoDB map 函数的最快方法,有什么想法吗?
JavaScript - 从当前日期获取一周的第一天
IT技术
javascript
algorithm
2021-02-02 12:01:57
6个回答
使用getDay
Date对象的方法,你可以知道一周中的天数(0=星期日,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 today = new Date();
var day = today.getDay() || 7; // Get current day number, converting Sun. to 7
if( day !== 1 ) // Only manipulate the date if it isn't Mon.
today.setHours(-24 * (day - 1)); // Set the hours to day number minus 1
// multiplied by negative 24
alert(today); // will be Monday
或者作为一个函数:
# modifies _date_
function setToMonday( date ) {
var day = date.getDay() || 7;
if( day !== 1 )
date.setHours(-24 * (day - 1));
return date;
}
setToMonday(new Date());
CMS 的答案是正确的,但假设星期一是一周的第一天。
Chandler Zwolle 的回答是正确的,但对 Date 原型进行了摆弄。
其他以小时/分钟/秒/毫秒为单位的答案是错误的。
下面的函数是正确的,将日期作为第一个参数,将所需的一周中的第一天作为第二个参数(星期日为 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)
查看Date.js
Date.today().previous().monday()
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));
这将运作良好。