Javascript 如何使用momentjs计算一个月的最后一个星期五
如何使用momentjs api计算本月的最后一个星期五?给定您希望最后一个星期五的月份时刻: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:
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")
}