我需要最快的方法来获得一周的第一天。例如:今天是11月11日,星期四;我想要这周的第一天,也就是11月8日,星期一。我需要最快的MongoDB地图函数的方法,有什么想法吗?
发布于 2010-11-12 00:13:14
使用Date对象的getDay
方法,您可以知道一周中的第几天(可以是0=Sunday、1=Monday等)。
然后,您可以减去该天数加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
发布于 2010-11-12 00:19:32
不确定它的性能如何,但这是可行的。
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());
发布于 2018-08-19 22:05:28
CMS的答案是正确的,但假设星期一是一周的第一天。
钱德勒·兹沃勒的答案是正确的,但在日期原型上摆弄了一下。
其他以小时/分钟/秒/毫秒为单位的答案是错误的。
下面的函数是正确的,它将日期作为第一个参数,将所需的一周的第一天作为第二个参数(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)
https://stackoverflow.com/questions/4156434
复制相似问题