所以我試圖通過從用戶獲取開始日期和結束日期來創建圖表。我需要計算日期之間的月數,然後每個月計算一下天數並獲取月份的名稱。計算兩個日期之間的月份,然後計算每個月的日期
我已經得到了兩個日期之間的月數,但似乎無法將餘下的代碼轉化爲代碼。我有一個名爲MonthRange
public class MonthRange
{
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
public string monthName { get; set; }
public MonthRange() {
}
public MonthRange(DateTime startDate, DateTime endDate, string monthName) {
this.startDate = startDate;
this.endDate = endDate;
this.monthName = monthName;
}
}
而我的方法類:
private List<MonthRange> GetRangeOfMonthsBetweenDates(DateTime startDate, DateTime endDate) {
List<MonthRange> result = new List<MonthRange>();
int months = (endDate.Year - startDate.Year)*12 + endDate.Month - startDate.month;
foreach(var m in months){
//get the start and end date of that month with the name and add it to the result list.
}
}
起腳的是,如果起始日期是中途一個月,然後就是什麼應該被保存在結果列表中,同樣如果endDate是月份的中間位置,那應該保存。我有點失落,並希望得到任何幫助。
編輯:所以這是我試圖實現的一個例子。我試圖創建一個圖表,繪製一個人在特定時間範圍內有食物的次數。
編輯2:所以我結束了會是這樣的:
private List<MonthRange> GetRangeOfMonthsBetweenDates(DateTime startDate, DateTime endDate) {
List<MonthRange> result = new List<MonthRange>();
DateTime holder = startDate;
var months = (endDate.Year - startDate.Year) * 12 + endDate.Month - startDate.Month;
for (int i = 0; i <= months; i++) {
if (i == 0)
{
result.Add(new MonthRange(startDate, CalculateStartOfMonth(endDate), startDate.ToString("MMM")));
}
else if (i == months)
{
result.Add(new MonthRange(CalculateEndOfMonth(startDate), endDate, endDate.ToString("MMM")));
}
else {
DateTime middleMonth = holder.AddMonths(1);
result.Add(new MonthRange(CalculateStartOfMonth(middleMonth), CalculateEndOfMonth(middleMonth), middleMonth.ToString("MMM")));
}
}
return result;
}
private DateTime CalculateStartOfMonth(DateTime endDate) {
var startOfMonth = new DateTime(endDate.Year, endDate.Month, 1);
return startOfMonth;
}
private DateTime CalculateEndOfMonth(DateTime startDate)
{
var endOfMonth = new DateTime(startDate.Year, startDate.Month, DateTime.DaysInMonth(startDate.Year, startDate.Month));
return endOfMonth;
}
要實現任何例如輸入和輸出? – Mark
你確定你所擁有的甚至是正確的嗎?你是否真的想要返回'1'作爲月數,當你輸入例如'2016年12月31日23:59'和'2017年1月1日00:01'分別作爲您的開始日期和結束日期?其餘的描述同樣含糊。您需要先編寫_precise_,_unambiguous_規範,詳細說明您實際需要的計算方式。這樣,代碼將很容易編寫。沒有它,你可以在圈子裏漫步數週,試圖弄清楚這一點。 –
@標誌例如:如果用戶輸入startDate爲16/05/2017,endDate爲24/07/2017。那麼月的數量應該是3,而第一個月的開始日期是16日,第二個月將是整體,第三個月將在24日結束。那有意義嗎? – bluebrigade23