【解決方法】2 つの日付の間の月を計算する方法


私のウェブサイトには開始日と終了日があります

たとえば、日数を数えずに数を計算する方法

開始日 2015 年 5 月 30 日
終了日 2015 年 1 月 6 日

この場合も、2015 年 5 月と 2015 年 6 月の 2 か月を表示したい

私のコードは

日付間の合計日数を計算し、

C#
protected void txtStartDate_TextChanged(object sender, EventArgs e)
   {
       string inputString = txtStartDate.Text;
       DateTime dt = DateTime.ParseExact(inputString, "yyyy/MM/dd", CultureInfo.InvariantCulture);
       dt = dt.AddMonths(Convert.ToInt32(txtNoOfMonths.Text));
       txtEndDate.Text = dt.ToString("yyyy/MM/dd");


       DateTime Date1 = Convert.ToDateTime(txtStartDate.Text);
       DateTime Date2 = Convert.ToDateTime(txtEndDate.Text);
       int DayDiff = (Date2.Date - Date1.Date).Days;
       Label1.Text = "Total days"+" "+(DayDiff.ToString());
        }

月の計算方法

解決策 1

SQL
Assuming the day of the month is irrelevant (i.e. the diff between 2011.1.1 and 2010.12.31 is 1), with date1 > date2 giving a positive value and date2 > date1 a negative value

((date1.Year - date2.Year) * 12) + date1.Month - date2.Month
Or, assuming you want an approximate number of 'average months' between the two dates, the following should work for all but very huge date differences.

date1.Subtract(date2).Days / (365.25 / 12)
Note, if you were to use the latter solution then your unit tests should state the widest date range for which your application is designed to work with and validate the results of the calculation accordingly.

解決策 2

ここを参照してください: Age の操作: TimeSpan とは異なります。[^]

解決策 3

LINQ を使用してこれを見つけるには、次のコードを検討してください。

C#
string StartDate="3/15/2015";
           string EndDate = "5/6/2015";
           DateTime ActualStartDate = DateTime.Parse(StartDate);
           DateTime ActualEndDate = DateTime.Parse(EndDate);
           ActualEndDate = new DateTime(ActualEndDate.Year, ActualEndDate.Month, DateTime.DaysInMonth(ActualEndDate.Year, ActualEndDate.Month));
           var diff = Enumerable.Range(0, Int32.MaxValue)
                                .Select(e => ActualStartDate.AddMonths(e))
                                .TakeWhile(e => e <= ActualEndDate)
                                .Select(e => e.ToString("MMMM"));

{“March”,”April”,”May”} として出力されます

解決策 4

コードで以下の関数を使用して、2 つの日付の間の月を表示してください:-

C#
private string getMonthsBetweenTwoDates(DateTime Date1, DateTime Date2)
    {
        var diff = Enumerable.Range(0, Int32.MaxValue)
                     .Select(e1 => Date1.AddMonths(e1))
                     .TakeWhile(e1 => e1 <= Date2)
                     .Select(e1 => e1.ToString("MMM/yyyy")).ToList();

        return  string.Join(",", diff.ToArray()).ToString();
    }

解決策 5

単純にこのクエリを使用して、2 つの日付の月差を取得します。

SQL
Declare @Start DateTime
Declare @End DateTime

Set @Start = '5/30/2015'
Set @End = '6/1/2015'

Select DateDiff(Month, @Start, @End + 1)

コメント

タイトルとURLをコピーしました