查找一个月中的周行数

时间:2014-10-01 20:56:06

标签: math date-arithmetic

考虑到开始日(星期三= 4)和一个月中的天数(31),找到一个月日历需要的星期行数的优雅方法是什么?

对于当前月份(startDay = 4,daysInMonth = 31),它将为5.但如果daysInMonth = 33,则为6行。

这并不是很有效:

int numRows = (startDay+daysInMonth)/daysInWeek;
if ((startDay+daysInMonth) % daysInWeek != 0) {
    numRows++;
}

3 个答案:

答案 0 :(得分:2)

实际上,我认为你的原始算法是正确的,只需要在做模数daysInWeek时减去1。

daysInWeek = 7
startDay = 3 # Zero based day of week array, 3 = Wednesday
daysInMonth = 31
numRows = (startDay+daysInMonth)/daysInWeek

if ((startDay+daysInMonth - 1) % daysInWeek != 0)
    numRows += 1
end

print numRows

正确显示6。 (顺便说一句,为什么你需要33个月一个月?)33天一个月应该是6行(如果有这样的话)。

33 day month starting on Wednesday

答案 1 :(得分:1)

int temp = daysInMonth;
temp = temp - (7 - startDay);
int result = ceiling(temp / 7) + 1;

答案 2 :(得分:1)

只需更改为

int numRows = (startDay + daysInMonth - 1) / daysInWeek;
if ((startDay+daysInMonth - 1) % daysInWeek != 0) {
    numRows++;
}

你应该得到正确的结果。 编辑:只是略微扩展它:你有正确的想法,你只是忘记了第1天的偏移是0而不是1的事实。