🕗
日時の比較と差分の相互変換
日付処理をしていると、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