首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何得到日历周的两个时刻之间的差值?

如何得到日历周的两个时刻之间的差值?
EN

Stack Overflow用户
提问于 2018-05-07 07:17:34
回答 3查看 3.3K关注 0票数 2

我希望在javascript中得到两个日期之间的日历周差值。

示例:

代码语言:javascript
运行
复制
a='09-May-2018'
b='14-May-2018'

这两个日历周的差值是2。

首先,我将日期转换为时间,然后通过Moment.js diff方法得到几个星期的差值。但这是考虑7天作为一个星期,并给我1以上的例子。

我想要得到一周的时间,然后减去它。但如果日期是两个不同的年份。我会得到错误的结果。就像'01-Jan-2017''01-Jan-2018'一样,给出1的周号。

有什么更好的方法来有效地做到这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-07 19:20:56

我有一个要求,如果差异更大,12周,我必须执行一些行动。所以我用一周一周的方法来做这件事。如下所示:

代码语言:javascript
运行
复制
Math.abs(endDate.diff(startDate, 'days'))<91 &&
  Math.abs(startDate.week() - endDate.week()) < 12) 
票数 0
EN

Stack Overflow用户

发布于 2018-05-07 10:43:02

您还可以用普通的javascript计算周差。由于你还没有完全解释如何确定星期数的规则,我做了一些猜测。以下内容如下:

  1. 每周的第一天默认为星期一。
  2. 复制日期并将其移至一周开始。
  3. 确保d0在d1之前
  4. 将周数计算为1 + (endDate - startDate) / 7
  5. 一周开始的日期可以使用一个可选的第三个参数来设置:0=星期日,1=星期一,等等。
  6. 结果总是积极的。如果日期为同一周,则差额为1。

只有当结束日期在开始日期之后才能正确工作。

代码语言:javascript
运行
复制
/* 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)));

票数 2
EN

Stack Overflow用户

发布于 2021-05-11 13:47:27

使用moment.js,根据https://momentjs.com/docs/#/durations/diffing/

代码语言:javascript
运行
复制
/**
* @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
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50208929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档