2

「相対時間」変換を行う最良の方法を探しているときに、この投稿に出くわしました

2013 年 3 月 3 日 (今日は 2013 年 5 月 25 日) の日付での最初のテストでは、実際の時間は 2 か月前に戻ってきました。

3.これはバグですか、それとも相対時間変換を行うためのより良い方法はありますか?

更新:そのコードを使用していたので、次のような拡張メソッドを作成しました。

DateTime.Parse('2013-03-05T16:12:30Z').ToRelativeTime()

それは2か月前に出力されます。

3か月前に作成したmoment.jsを使用してクライアント側のコードを実行します。

任意の DateTime を使用して、過去の日付に ToRelativeTime を使用できるようにしたい

4

4 に答える 4

1

TimeSpanオブジェクトの違いを表すために使用しDateTimeます。

3 月 3 日から 5 月 25 日までの例では、まだ丸 3 か月が経過していません。6 月 3 日までは、3 か月を取得できません。それまでは 2 か月または 2.x か月です。

于 2013-05-25T13:57:17.427 に答える
1

これも定義の問題です。

たとえば、銀行の場合、1 年に 360 日しかありません。つまり、1 か月前は 30 日前のようなものです。

また、ちょうど 1 か月前だったと言う場合は、「1 か月前の同じ日」という意味です。これは、場合によっては、平均 30 日より多い (7 月など) または少ない (2 月など) こともあります。

では、今何が必要ですか?2 番目のケースの方がより論理的であるため、2 か月前に戻りたいとします。

C# では、AddMonths-Function (25.05.2013 => 25.03.2013) を呼び出すだけです。

DateTime.AddMonths(-2)

編集: いくつかの日時をジェフの関数に渡しました:ここにいくつかの結果があります:

DateTime.AddMonths(-2) => Returns two months ago.
DateTime.AddMonths(-2).AddDays(1) => Returns one month ago.
DateTime.AddMonths(-3) => Returns two months ago (!)

これは、ベースとして 30 日を使用しているためです。

int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));

私が指摘したように、それは単なる定義の問題です。

于 2013-05-25T14:18:37.423 に答える
0

あなたが参照した投稿は、日付と日の計算のベースが異なる jQuery と Java に関するものでした。JavaScript と C# で同じアルゴリズムを使用すると、1 ずつ異なる結果が表示されることがあります。曜日を取得する JavaScript 関数を確認してください。

あなたの投稿は C# でタグ付けされているため、実際には C# .NET に関する質問をしています。DateTime.AddMonths(-2) を試して結果を確認してください。

于 2013-05-25T14:06:18.453 に答える