はじめに
Lambdaで、現在時刻と、特定の期間を比較して、範囲内かどうか短いコードで判定する方法をまとめました。
面倒なので、ライブラリも使用しない方法になります。
現在日時が特定の期間内かどうか判定
解説
-
getTime()
は常にUTCでの値の取得になるため、現在日時もUTCで取得します。 -
content.from
とcontent.to
に特定の日付を入れてください。
(必ず"xxxx-xx-xxTxx:xx+09:00"
の形式になるようにしてください。) -
UTCでの比較にはなりますが、
content
内の"xxxx-xx-xxTxx:xx+09:00"
は、JSTにしております。
つまり、現在時刻はUTC
、content
内は、JST
からgetTime()
によってUTC
に変換され、UTC同士で比較
されることになります。
下記の場合ですと、
日本時間で、2022/5/5の12時
〜2022/5/8の12時まで
の範囲に現在日時が入っているかどうか判定します。
コード内容
const content = {
// 日本時間で記載すること
from: "2022-05-05T12:00+09:00",
to: "2022-05-08T12:00+09:00",
};
const now = Date.now();
const from = new Date(content.from).getTime();
const to = new Date(content.to).getTime();
exports.handler = (event, context, callback) => {
if ( from <= now && now <= to) {
console.log("within the period");
return;
}
console.log("out of term");
};
パフォーマンス
現在時刻を取得するだけであれば、new Date().getTime()
よりもDate.now()
の方がパフォーマンスがよいようです。
参考
日付の差分を取得する場合こちらの方法がよいです。