🕗

日時の比較と差分の相互変換

2023/05/11に公開

日付処理をしていると、2つの日時を比較することがあります。

その方法として、比較演算子(<, <=, >, >=)を使うこともあれば、ライブラリの関数(isBefore, isAfter, lt, gtなど)を使うこともあります。
あるいは、差分を計算して正か負かで判断(diff(A, B) > 0, A - B < 0)することもあります。

どの方法を使うかは、人それぞれの好みですが、それらを書き直すときは少し頭をつかいます。

考え方

基本的な考え方は、中学校で学ぶ不等式の計算になります。

A > B からBを左辺に移項すると A - B > 0となり、同じ式になります。

あとは、英語と日本語、記号の変換になります。例えば、A isBefore Bは、日本語でAはBよりも前となり、記号にするとA < Bとなります。

同じになる式

とはいえ、いちいち考えるのも面倒ですので、同じになる式を一覧にしてみました。何も考えずにAとBに当てはめるだけで相互変換できます。

A < Bと同じになる式

AはBよりも前 AはB以後ではない BはAよりも後 BはA以前ではない
A < B !(A >= B) B > A !(B <= A)
A isBefore B !(A isSameOrAfter B) B isAfter A !(B isSameOrBefore A)
A lt B !(A gte B) B gt A !(B lte A)
A - B < 0 !(A - B >= 0) B - A > 0 !(B - A <= 0)
diff(A, B) < 0 !(diff(A, B) >= 0) diff(B, A) > 0 !(diff(B, A) <= 0)

A <= Bと同じになる式

AはB以前 AはBよりも後ではない BはA以後 BはAよりも前ではない
A <= B !(A > B) B >= A !(B < A)
A isSameOrBefore B !(A isAfter B) B isSameOrAfter A !(B isBefore A)
A lte B !(A gt B) B gte A !(B lt A)
A - B <= 0 !(A - B > 0) B - A >= 0 !(B - A < 0)
diff(A, B) <= 0 !(diff(A, B) > 0) diff(B, A) >= 0 !(diff(B, A) < 0)

Discussion