public static void Main()
var policyDateEff = new DateTime(2017, 2, 15);
var cancelDate = new DateTime(2017, 4, 15);
var x = GetNumMosForPolicyYear(policyDateEff, cancelDate);
private static int GetNumMosForPolicyYear(DateTime invPerBeg, DateTime invPerEnd) {
var startOfMonthlyPeriod = invPerBeg;
DateTime endOfMonthlyPeriod = startOfMonthlyPeriod.AddMonths(1).AddDays(-1);
while (endOfMonthlyPeriod < invPerEnd) {
startOfMonthlyPeriod = startOfMonthlyPeriod.AddMonths(1);
endOfMonthlyPeriod = startOfMonthlyPeriod.AddMonths(1).AddDays(-1);
var startOfLastMonthlyPeriod = startOfMonthlyPeriod;
var lastBillableDateInPeriod = startOfMonthlyPeriod.AddDays(15);
if (lastBillableDateInPeriod <= invPerEnd) { months++; }
startOfMonthlyPeriod = startOfMonthlyPeriod.AddMonths(-1);
while (startOfMonthlyPeriod >= invPerBeg) {
startOfMonthlyPeriod = startOfMonthlyPeriod.AddMonths(-1);