首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据给定日期计算当前或下一个年度季度的第一个月和当前年度季度的最后一个月

根据给定日期计算当前或下一个年度季度的第一个月和当前年度季度的最后一个月
EN

Stack Overflow用户
提问于 2013-08-05 18:39:15
回答 6查看 3.1K关注 0票数 1

给定日期,我希望计算当前的年度季度。

如果今天的日期大于给定日期,我希望根据给定日期计算当前年度季度的最后一个月,并计算下一个年度季度的第一个月。

我经营的宿舍是一月至三月、四月至六月、七月至九月及十月至十二月.

如果输入日期为01/10/2013,我希望产出为1月份(下一季度的第一个月)和12月份(当前年度季度的最后一个月)。在这种情况下,月份变量将包含值10,而day变量将包含值1。

到目前为止,我的尝试:

每个季度的最后一个月

代码语言:javascript
复制
if (month % 3 == 0)
  month += (DateTime.Now.Day > day ? 3 : 0);
if (month % 3 == 1)
  month += 2;
if (month % 3 == 2)
  month += 1;

每个季度的第一个月

代码语言:javascript
复制
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;
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-08-05 18:50:05

如前所述,该算法提供了所需的功能:

代码语言:javascript
复制
int quarterCurr = 1;
if (Convert.ToDouble(curMonth) / 3.0 > 1.0)
{
    quarterCurr = Convert.ToInt32(Convert.ToDouble(curMonth) / 3.0);
    if (curMonth % 3 != 0)
    {
        quarterCurr = quarterCurr + 1;
    }
}
int firstMonthCurr = 3 * (quarterCurr - 1) + 1;
int lastMonthCurr = 3 * quarterCurr;

int quarterNext = quarterCurr + 1;
if (quarterNext > 4)
{
    quarterNext = 1;
}
int firstMonthNext = 3 * (quarterNext - 1) + 1;

这是一种计算所需信息的简单/清晰的方法:每个季度的第一/最后一个月。

该代码将被放入一个函数中,在需要时将调用该函数。它将作为输入,仅作为当前月份的输入,并作为输出返回长度为2的一维数组:当前季度最后一个月的第一个位置和下一个季度第一个月的第二个位置(或任何其他选项)。因此,主要功能(计算任何输入月份的目标值)都包括在内,但您必须使其适应您的确切需求。

票数 1
EN

Stack Overflow用户

发布于 2013-08-05 18:49:11

您可以使用整数数学得到当前的四分之一。

代码语言:javascript
复制
int currentQuarter = ((month-1)/3)+1;

这是因为整数除法总是会被截断,所以如果月份是1到3,你会得到0到2,这等于0。第4到第6个月将给出3-5乘以3,等于1,依此类推.

就某一季度而言,第一季度和最后一个月将由以下部门提供:

代码语言:javascript
复制
int firstMonthOfQuarter = (quarter*3)-2;

代码语言:javascript
复制
int lastMonthOfQuarter = (quarter*3);

请注意,其中的quarter将是您想要的月份的季度。如果你想要现在的季度,那就用这个。如果您想要下一个季度,那么执行quarter+=1并检查溢出(即如果季度是5,那么它实际上是1)。或者,您可以将%12添加到第一个和上个月的计算中,然后它将在四分之一的情况下很好地工作。

代码语言:javascript
复制
int firstMonthOfQuarterOfNextQuarter = (((quarter+1)*3)-2)%12;
int lastMonthOfQuarterOfNextQuarter = ((quarter+1)*3)%12;

我有点困惑,您想要如何将这些组合在一起,因为您要么想要当前季度(如我的第一行所示),要么在某些情况下,还需要下一个季度和当前季度的第一个和最后一个月。我不知道你是怎么还的,所以你得自己把它整理好。

票数 5
EN

Stack Overflow用户

发布于 2013-08-05 18:49:57

代码语言:javascript
复制
var currentDate = DateTime.Now;
var quarterNumber = ((currentDate.Month-1)/3) + 1;
var firstDayOfQuarter = new DateTime(currentDate.Year, ((quarterNumber-1) * 3) + 1, 1);
var lastDayOfQuarter = firstDayOfQuarter.AddMonths(3).AddDays(-1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18065323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档