如何使用momentjs api计算本月的最后一个星期五?
答案 0 :(得分:4)
正确回答这个问题:
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');
}
如果该月的最后一天是星期五,则上一个答案将返回上周五的下一个答案。
答案 1 :(得分:2)
考虑到你想要上个星期五的月份:
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');
}
},
E.g。
// returns moment('2014-03-28 00:00:00');
lastFridayForMonth(moment('2014-03-14));
答案 2 :(得分:1)
我尝试了多个月的测试,几个月以上的回答@afternoon没有用。下面是测试代码。(一个这样的测试是2018年8月)
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")
}
答案 3 :(得分:1)
对不起家伙,但我测试了之前的答案,但都错了。
检查所有这些
矩([2017,2])
你会发现结果不正确。
我写了这个迄今为止有效的解决方案:
let date = moment([2017,2]).endOf('month');
while (date.day() !== 5) {
date.subtract(1,'days')
}
return date;
&#13;
答案 4 :(得分:0)
更短的答案:
var lastFridayForMonth = function (monthMoment) {
let lastDay = monthMoment.endOf('month').endOf('day');
return lastDay.subtract((lastDay.day() + 2) % 7, 'days');
}