Javascript 如何使用momentjs计算一个月的最后一个星期五

Javascript 如何使用momentjs计算一个月的最后一个星期五,javascript,momentjs,Javascript,Momentjs,如何使用momentjs api计算本月的最后一个星期五?给定您希望最后一个星期五的月份时刻: var lastFridayForMonth = function (monthMoment) { var lastDay = monthMoment.endOf('month').startOf('day'); switch (lastDay.day()) { case 6: return lastDay.subtract(1, 'days'); default:

如何使用momentjs api计算本月的最后一个星期五?

给定您希望最后一个星期五的月份时刻:

var lastFridayForMonth = function (monthMoment) {
  var lastDay = monthMoment.endOf('month').startOf('day');
  switch (lastDay.day()) {
    case 6:
      return lastDay.subtract(1, 'days');
    default:
      return lastDay.subtract(lastDay.day() + 2, 'days');
  }
},
例如


此问题的正确答案:

var lastFriday = function () {
  var lastDay = moment().endOf('month');
  if (lastDay.day() >= 5)
   var sub = lastDay.day() - 5;
  else
   var sub = lastDay.day() + 2;
  return lastDay.subtract(sub, 'days');
}
如果一个月的最后一天是星期五,则上一个答案返回下一个星期五到上一个星期五。

较短的答案:

var lastFridayForMonth = function (monthMoment) {
    let lastDay = monthMoment.endOf('month').endOf('day');
    return lastDay.subtract((lastDay.day() + 2) % 7, 'days');
}

我尝试了几个月的测试,几个月来,@午后的回答都不起作用。以下是测试代码。(其中一项测试针对2018年8月)


对不起,伙计们,我测试了之前的答案,所有答案都错了

检查他们所有人的健康状况

时刻([2017,2])

你会发现结果是不正确的

我写了这个解决方案,到目前为止一直有效:

let date=时刻([2017,2]).endOf('month');
while(date.day()!==5){
日期。减去(1,'days')
}

返回日期查看一个月的最后一天是什么工作日,并相应地减去天数…?我不知道momentjs,但在快速搜索后:moment().add('months',1).date(0);我的答案>这里
var lastFridayForMonth = function (monthMoment) {
    let lastDay = monthMoment.endOf('month').endOf('day');
    return lastDay.subtract((lastDay.day() + 2) % 7, 'days');
}
var moment  = require('moment')
var affirm  = require("affirm.js")
var cc = moment(Date.now())
for (var i = 0; i < 100000; i++) {
    lastFridayForMonth(cc)
    var nextWeek = moment(cc).add(7, 'days')
    console.log(cc.format("ddd DD MMM YYYY"), nextWeek.format('MMM'))
    affirm((cc.month() - nextWeek.month()) === -1 || (cc.month() - nextWeek.month()) === 11, "1 month gap is not found")
    affirm(cc.day() === 5, "its not friday")
    cc.add(1, "months")
}
function lastFridayForMonth(monthMoment) {
    var month = monthMoment.month()
    monthMoment.endOf("month").startOf("isoweek").add(4, "days")
    if (monthMoment.month() !== month) monthMoment.subtract(7, "days")
}