我需要最快的方法得到一周的第一天。例如:今天是11月11日,是星期四;我想要这周的第一天,也就是11月8日,一个星期一。我需要MongoDB映射函数的最快方法,有什么想法吗?
当前回答
不知道它的性能如何,但这是可行的。
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());
其他回答
一个只有数学计算的例子,没有任何Date函数。
const date = new date (); Const ts = +日期; const mondayTS = ts % (60 * 60 * 24 * (7-4) * 1000); const monday =新的日期(星期一); console.log(monday.toISOString(), 'Day:', monday.getDay());
const formatTS = v => new Date(v).toISOString(); const adjust = (v, d = 1) => v - v % (d * 1000); const d = new Date('2020-04-22T21:48:17.468Z'); const ts = +d; // 1587592097468 const test = v => console.log(formatTS(adjust(ts, v))); test(); // 2020-04-22T21:48:17.000Z test(60); // 2020-04-22T21:48:00.000Z test(60 * 60); // 2020-04-22T21:00:00.000Z test(60 * 60 * 24); // 2020-04-22T00:00:00.000Z test(60 * 60 * 24 * (7-4)); // 2020-04-20T00:00:00.000Z, monday // So, what does `(7-4)` mean? // 7 - days number in the week // 4 - shifting for the weekday number of the first second of the 1970 year, the first time stamp second. // new Date(0) ---> 1970-01-01T00:00:00.000Z // new Date(0).getDay() ---> 4
我在用这个
function get_next_week_start() {
var now = new Date();
var next_week_start = new Date(now.getFullYear(), now.getMonth(), now.getDate()+(8 - now.getDay()));
return next_week_start;
}
不知道它的性能如何,但这是可行的。
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());
该函数使用当前毫秒时间减去当前周,如果当前日期是周一,则再减去一周(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)