計算2個日期間有哪些月份
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MirandaTestConsole
{
/// <summary>
/// 計算2個日期間有哪些月份
/// </summary>
class SpanMonth
{
static void Main(string[] args)
{
while (true)
{
Console.Write("請輸入查詢起日(yyyy/mm/dd):");
string StartDate = Console.ReadLine();
Console.Write("請輸入查詢迄日(yyyy/mm/dd):");
string EndDate = Console.ReadLine();
List<string> MonthList = new List<string>();
MonthList=countMonth(StartDate, EndDate);
foreach (var x in MonthList)
{
Console.WriteLine(x);
}
Console.ReadLine();
}
}
/// <summary>
/// 計算查詢區間
/// </summary>
/// <param name="strDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public static List<string> countMonth(string strDay, string endDay)
{
List<string> MonthList = new List<string>();
DateTime StartDate = DateTime.Parse(strDay);
DateTime EndDate = DateTime.Parse(endDay);
int totalMonth = EndDate.Year * 12 + EndDate.Month - StartDate.Year * 12 - StartDate.Month;
int Years = totalMonth / 12;
int Months = Mod(totalMonth, 12);
Console.WriteLine("總月數:" + totalMonth);
Console.WriteLine(Years + "年又" + Months+"個月...");
if (StartDate.Year == EndDate.Year)
{
//起訖同年
for (int m = 0 ; m <= (EndDate.Month-StartDate.Month) ; m++)
{
int MM = StartDate.Month + m;
MonthList.Add(StartDate.Year + "/" + MM.ToString("00"));
}
}
else
{
//起訖不同年
//先處理今年剩下的
for (int m = StartDate.Month ; m <= 12 ; m++)
{
MonthList.Add(StartDate.Year + "/" + m.ToString("00"));
}
//處理往後幾年的
for (int c = 1 ; c <= (EndDate.Year - StartDate.Year) ; c++)
{
int yyyy = StartDate.Year + c;
if (yyyy == EndDate.Year)
{
for (int mm = 1 ; mm <= EndDate.Month ; mm ++)
{
MonthList.Add(EndDate.Year + "/" + mm.ToString("00"));
}
}
else
{
for (int mn = 1 ; mn <= 12 ; mn++)
{
MonthList.Add(yyyy + "/" + mn.ToString("00"));
}
}
}
}
return MonthList;
}
public static int Mod(int n, int m)
{
return ((n % m) + m) % m;
}
}
}
