我希望在javascript中得到两个日期之间的日历周差值。
示例:
a='09-May-2018'
b='14-May-2018'
这两个日历周的差值是2。
首先,我将日期转换为时间,然后通过Moment.js diff方法得到几个星期的差值。但这是考虑7天作为一个星期,并给我1以上的例子。
我想要得到一周的时间,然后减去它。但如果日期是两个不同的年份。我会得到错误的结果。就像'01-Jan-2017'
和'01-Jan-2018'
一样,给出1的周号。
有什么更好的方法来有效地做到这一点吗?
发布于 2018-05-07 19:20:56
我有一个要求,如果差异更大,12周,我必须执行一些行动。所以我用一周一周的方法来做这件事。如下所示:
Math.abs(endDate.diff(startDate, 'days'))<91 &&
Math.abs(startDate.week() - endDate.week()) < 12)
发布于 2018-05-07 10:43:02
您还可以用普通的javascript计算周差。由于你还没有完全解释如何确定星期数的规则,我做了一些猜测。以下内容如下:
1 + (endDate - startDate) / 7
只有当结束日期在开始日期之后才能正确工作。
/* Calculate weeks between dates
** Difference is calculated by getting date for start of week,
** getting difference, dividing and rounding, then adding 1.
** @param {Date} d0 - date for start
** @param {Date} d1 - date for end
** @param {number} [startDay] - default is 1 (Monday)
** @returns {number} weeks between dates, always positive
*/
function weeksBetweenDates(d0, d1, startDay) {
// Default start day to 1 (Monday)
if (typeof startDay != 'number') startDay = 1;
// Copy dates so don't affect originals
d0 = new Date(d0);
d1 = new Date(d1);
// Set dates to the start of the week based on startDay
[d0, d1].forEach(d => d.setDate(d.getDate() + ((startDay - d.getDay() - 7) % 7)));
// If d1 is before d0, swap them
if (d1 < d0) {
var t = d1;
d1 = d0;
d0 = t;
}
return Math.round((d1 - d0)/6.048e8) + 1;
}
console.log(weeksBetweenDates(new Date(2018, 4, 9), new Date(2018, 4, 14)));
发布于 2021-05-11 13:47:27
使用moment.js,根据https://momentjs.com/docs/#/durations/diffing/
/**
* @param fromDate - moment date
* @param toDate - moment date
* @return {int} diffInWeeks Diff between dates with weeks as unit
**/
const getDiffInWeeks = (fromDate, toDate) => {
const requestedOffset = 1
const diff = toDate.diff(fromDate);
const diffInWeeks = moment.duration(diff).as('weeks')
return Math.ceil(diffInWeeks) + requestedOffset
}
https://stackoverflow.com/questions/50208929
复制相似问题