给定一个日期,我希望计算当前的年度季度。
如果今天的日期大于给定的日期,我希望根据给定的日期计算当前年度季度的最后一个月,以及下一个年度季度的第一个月。
我经营的宿舍是 jan-mar、apr-jun、jul-sep 和 oct-dec。
如果日期输入为 01/10/2013,我希望输出为 1 月(下一个年度季度的第一个月)和 12 月(当前年度季度的最后一个月)。在这种情况下,月份变量将包含值 10,而日变量将包含值 1。
我到目前为止的尝试:
每个季度的最后一个月
if (month % 3 == 0)
month += (DateTime.Now.Day > day ? 3 : 0);
if (month % 3 == 1)
month += 2;
if (month % 3 == 2)
month += 1;
Run Code Online (Sandbox Code Playgroud)
每个季度的第一个月
if (month % 3 == 1) // jan/mapr/jul/oct
month += (DateTime.Now.Day > day ? 3 : 0);
if (month % 3 == 2) // feb/may/aug/nov
month += 2;
if (month % 3 == 0) // mar/jun/sep/dec
month += 1;
Run Code Online (Sandbox Code Playgroud)
您可以使用整数数学获得当前季度。
int currentQuarter = ((month-1)/3)+1;
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为整数除法总是会截断,所以如果月份是 1 到 3,你将得到 0 到 2 超过 3 等于 0。4 到 6 月份将得到 3-5 超过 3 等于 1,依此类推。
对于给定的季度,第一个月和最后一个月将通过以下方式给出:
int firstMonthOfQuarter = (quarter*3)-2;
Run Code Online (Sandbox Code Playgroud)
和
int lastMonthOfQuarter = (quarter*3);
Run Code Online (Sandbox Code Playgroud)
请注意,quarter这些将是您想要的月份的季度。如果您想要当前季度,请使用它。如果你想要下一个季度然后quarter+=1检查溢出(即如果季度是 5 那么它实际上是 1)。或者,您可以添加%12到第一个月和最后一个月的计算中,然后它可以在 5 的四分之一处正常工作。
int firstMonthOfQuarterOfNextQuarter = (((quarter+1)*3)-2)%12;
int lastMonthOfQuarterOfNextQuarter = ((quarter+1)*3)%12;
Run Code Online (Sandbox Code Playgroud)
我对如何将它们放在一起感到有些困惑,因为您要么想要当前季度(如我的第一行所示),要么在某些情况下还需要下一个和当前季度的第一个月和最后一个月。我不知道你是如何退货的,所以你必须自己把它放在一起。