支持不傳參數/傳1個參數/傳2個參數。

不傳參數:返回今天內的日期時間範圍;

傳1個參數:自動判斷該參數早於/晚於當前日期時間,並自動返回合理有效的時間範圍;

傳2個參數:自動判斷兩個參數的大小,並按日期時間從小到大返回有效的時間範圍。

/// <summary>
/// 返回日期時間範圍
/// </summary>
/// <param name="dt1">第一個日期時間</param>
/// <param name="dt2">第二個日期時間</param>
/// <returns>日期時間範圍元組</returns>
public static Tuple<DateTime, DateTime> GetDateTimeRange(DateTime? dt1 = null, DateTime? dt2 = null)
{
    DateTime todayStart = DateTime.Today;
    DateTime todayEnd = todayStart.AddDays(1).AddTicks(-1);

    if (!dt1.HasValue && !dt2.HasValue)
    {
       return Tuple.Create(todayStart, todayEnd);
    }
    else if (dt1.HasValue && !dt2.HasValue)
    {
       DateTime input = dt1.Value;
       return input < todayEnd
       ? Tuple.Create(input, todayEnd)
       : input > todayStart ? Tuple.Create(todayStart, input) : Tuple.Create(todayStart, todayEnd);
    }
    else if (!dt1.HasValue && dt2.HasValue)
    {
       DateTime input = dt2.Value;
       return input < todayEnd
       ? Tuple.Create(input, todayEnd)
       : input > todayStart ? Tuple.Create(todayStart, input) : Tuple.Create(todayStart, todayEnd);
    }
    else
    {
       DateTime start = dt1.Value < dt2.Value ? dt1.Value : dt2.Value;
       DateTime end = dt1.Value > dt2.Value ? dt1.Value : dt2.Value;
       return Tuple.Create(start, end);
    }
}