2019年11月24日 星期日

尋找兩個日期的間隔

◎直接套用C#的函式,計算兩個日期差(只能計算純天數)

            TimeSpan span = dateTimePicker2.Value - dateTimePicker1.Value;
            int diffDays = Convert.ToInt32(span.Days);

※宣告TimeSpan形式來計算兩者的天數差,取日期則用dateTimePicker物件抓值
如果想抓今天的日期則可以使用

            DateTime.Now;

除了抓今天日期外還可以抓到現在是幾點幾分幾秒(因為C#只有DateTime沒有DATE)




◎自行計算兩個日期差距的年月日顯示(因為沒現成函式)

            DateTime todayDate, endDate;

            todayDate = dateTimePicker1.Value;
            endDate = dateTimePicker2.Value;

            int totalmonth;
            totalmonth = (endDate.Year - todayDate.Year) * 12 + endDate.Month - todayDate.Month;
            totalmonth += endDate.Day < todayDate.Day ? -1 : 0;
            //totalmonth = (todayDate.AddMonths(totalmonth) > endDate) ? totalmonth - 1 : totalmonth;

            year = totalmonth / 12;
            month = totalmonth % 12;
            day = (endDate - todayDate.AddMonths(totalmonth)).Days

1.宣告兩個DateTime變數todayDate和endDate,先抓取兩個日期做計算用不去動原本抓好的日期
2.宣告totalmonth去計算這兩者之前差幾個月(年換算成月,日則不管,純計算月數)
3.如果日期相減會變負數,需要借月份相減,則月份-1

※條件 ? A : B是C的運算子,意思是若條件成立則做A,不成立則做B,其實和單組if else同樣意思但更簡單
※註解行和前一行是同樣意思不同寫法而已

4.再來計算年和月,把總月數換算成幾年幾月

但實作上算出來會有點問題
若11/21和12/21,算出來結果會是1個月又0天
若11/21和12/22,算出來結果會是1個月又0天
若11/21和12/23,算出來結果會是1個月又1天(類推)
日相同時沒問題,但是差一天的時候開始會少1天
所以額外寫個例外處理

            if (endDate.Day - todayDate.Day == 0)       //微調結果
            {
                day = 0;
            }
            else
            {
                day = (endDate - todayDate.AddMonths(totalmonth)).Days + 1;
            }

之後有找到原因再行處理吧,先這樣解決


沒有留言:

張貼留言