日付間の時間的な違いを見つける
2 つの日付間の年、月、週、日の差を求めるのは複雑な作業になる場合があります。見かけの単純さにもかかわらず、計算を複雑にする微妙なニュアンスが現れます。
引き算の落とし穴
ある日付から別の日付を日数で引くだけでは、本当の違いを正確に把握することはできません。日数が異なると、年/月/週/日の間隔が同じになる可能性があるためです。たとえば、2008 年 6 月 19 日から 2010 年 6 月 19 日は 2 年を表しますが、これは 365 * 2 日にも相当します。うるう年では方程式がさらに複雑になり、単純な減算の信頼性が低くなります。
再帰的減算アプローチ
これらの複雑さに対処するには、再帰的減算アプローチを使用できます。結果の日付が 1 年以内になるまで年が減算されます。同様に、日付が 1 か月以内になるまで月が減算されます。
月の減算のあいまいさ
月の減算では、さらなる課題が生じます。 「3 月 30 日」の前の月を特定するのは簡単ではありません。
数日を超えた複雑さ
数日以内であっても、潜在的な不一致が発生する可能性があります。夏時間の調整とうるう秒により、1 日が常に 24 時間であるという前提が崩れる可能性があります。
推奨される実装
これらの課題に取り組むには、「期間」の定義を検討してください。日、月、および日付をカプセル化する構造体years:
public struct Period { // ... (Implementation omitted for brevity) ... }
「期間」と日付の加算演算子を実装し、その後に 2 つの日付間の時間的な差を計算する「Difference」メソッドを実装します:
public static DateTime operator +(DateTime date, Period period) { // TODO: Implement this! } public static Period Difference(DateTime first, DateTime second) { // TODO: Implement this! }
単体テストと適切な実装
簡単なテストから始めて、徹底的な単体テストが重要です閏年を含むより複雑なシナリオに徐々に進みます。このタスクではさまざまな一時的なニュアンスを慎重に考慮する必要があるため、適切な実装には十分な時間を割り当ててください。
以上が2 つの日付間の時間差を正確に計算するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。