假设我的合约的开始和结束日期为2016年1月2日至2017年1月31日
季度是根据合约的开始日期确定的,所以它与使用普通的日历季度不同。
Q1:FEB MAR APR
Q2:MAY JUN JUL
Q3:8月10日9月
Q4:1月12日
使用正常的日历季度,我可以做到:(date.Month + 2) / 3;
在这种情况下我该怎么做?
答案 0 :(得分:1)
像这样更通用的东西?
var quarter = (((checkDate.Year * 12 + checkDate.Month - 1) - (startDate.Year * 12 + startDate.Month - 1)) / 3) % 4 + 1;
这是一种将当前日期考虑在内的方法:
using System;
namespace ConsoleApplication1
{
class Contract
{
public DateTime StartDate { get; set; }
public int CurrentQuarter
{
get
{
var now = DateTime.Now.Date;
var month = (now.Year*12 + now.Month - 1) - (StartDate.Year*12 + StartDate.Month - 1);
if (now.Day < StartDate.Day) month--;
var quarter = (month / 3) + 1;
return quarter;
}
}
// ...
}
class Program
{
static void Main()
{
var contract = new Contract { StartDate = new DateTime(2016, 1, 12) };
Console.WriteLine("Current contract quarter is {0}", contract.CurrentQuarter);
}
}
}
答案 1 :(得分:1)
您可以使用与以前相同的逻辑,只需先减去合约的起始月份。当然,您还需要考虑明年的日期。如果你只减去月份,那么这些将永远是负数,所以你可以使用支票来判断它是明年,并进行补偿。所以,对于你给出的例子:
var startMonth = 2;
var date = DateTime.Now; //Or whatever date to check
var monthDiff = date.Month - startMonth;
if (monthDiff < 0)
{
monthDiff += 12;
}
var quarter = (monthDiff + 3) / 3;
答案 2 :(得分:0)
尝试以下方法:
((date.Month + 10) / 3) % 4;