はじめ
Lambdaで、当日の日付を20220116
の形にし、5日後の日付20220121
を引くと、5
という数字が出せるようにすることを目的として、Lambdaを作成したため、まとめます。
Lambdaコードの流れ
当日の日付
- 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
- ↓UTCをJSTに変換する
- 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
- ↓タイムスタンプに変更
- 1642765665851
- ↓年、月、日のみに変換。(時間、分、秒は、切り捨て)
- 20210116
5日後の日付
- 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
- ↓日付を5日進める
- 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
- ↓UTCをJSTに変換する
- 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
- ↓タイムスタンプに変更
- 1642765665851
- ↓年、月、日のみに変換。(時間、分、秒は、切り捨て)
- 20210121
Lambdaの設定
Node.js
Node.js
exports.handler = async (event) => {
// UTCの日付 "2022-01-16T11:31:09.498Z"
const dateUTC = new Date();
const fivedateUTC = new Date().setDate(dateUTC.getDate() + 5);
// JSTに変更後、タイムスタンプに変える
const dateJST = new Date(dateUTC.getTime() + 32400000);
// 5日進める
const FivedateJST = new Date(fivedateUTC + 32400000);
// タイムスタンプを日付の年月日に変える。時間は切り捨て
let year = dateJST.getFullYear();
let month = dateJST.getMonth()+1;
let day = dateJST.getDate();
// 時間と分も必要な場合
// let hours = dateJST.getHours();
// let minutes = dateJST.getMinutes();
// let seconds = dateJST.getSeconds();
let FiveLateryear = FivedateJST.getFullYear();
let FiveLatermonth = FivedateJST.getMonth()+1;
let FiveLaterday = FivedateJST.getDate();
// 値が1桁であれば '0'を追加
if (month < 10) month = '0' + month;
if (day < 10) day = '0' + day;
// if (hours < 10) hours = '0' + hours;
// if (minutes < 10) minutes = '0' + minutes;
// if (seconds < 10) seconds = "0" + seconds;
if (FiveLatermonth < 10) FiveLatermonth = '0' + FiveLatermonth;
if (FiveLaterday < 10) FiveLaterday = '0' + FiveLaterday;
//"20220116"
const dateTimeString = year + month + day
// const dateTimeString = year + month + day + hours + minutes + seconds;
//"20220121"
const FiveDaysLaterTimeString = FiveLateryear + FiveLatermonth + FiveLaterday;
//20220116
const today = Number(dateTimeString);
//20220121
const FiveDaysLater = Number(FiveDaysLaterTimeString);
return FiveDaysLater - today;
};
Python
Python
from datetime import datetime, timedelta
def lambda_handler(event, context):
# 2022-01-16 20:54:05.134159
dateJST = datetime.today() + timedelta(hours=9)
dateJSTFiveDaysLater = dateJST + timedelta(days=5)
#現在の日本の日付 20220116
today = int(dateJST.strftime("%Y%m%d"))
# 5日後 20220121
fiveDaysLater = int(dateJSTFiveDaysLater.strftime("%Y%m%d"))
return fiveDaysLater - today
Pythonの方がすでにLambdaでインストール済みのライブラリが豊富なため、コードが少なくていいですね。
どちらも20220121 - 20220116 = 5
という結果になりました。
日付の比較
Pythonの datetime オブジェクトは 比較演算子が使用できるようです。
2022-01-21 と 2022-01-16の比較ができました。
python
from datetime import datetime, timedelta
def lambda_handler(event, context):
# 2022-01-16 20:54:05.134159
dateJST = datetime.today() + timedelta(hours=9)
# 2022-01-16
today = dateJST.strftime("%F")
# 2022-01-21
dateJSTFiveDaysLater = (dateJST + timedelta(days=5)).strftime("%F")
#2022-01-21 > 2022-01-16
if dateJSTFiveDaysLater > today:
return "true"
else:
return "false"
Response
"true"
時間のみ Node.js
ちなみに、時間だけの場合以下で、表示されます。
exports.handler = async (event) => {
const nowJST = new Date(Date.now() + (new Date().getTimezoneOffset() + 9 * 60) * 60 * 1000);
const now = () => {
let hoursToday = nowJST.getHours();
let minutesToday = nowJST.getMinutes();
let secondsToday = nowJST.getSeconds();
if (hoursToday < 10) hoursToday = '0' + hoursToday;
if (minutesToday < 10) minutesToday = '0' + minutesToday;
if (secondsToday < 10) secondsToday = '0' + secondsToday;
return hoursToday + ':' + minutesToday + ':' + secondsToday;
};
console.log(now());
// 12:10:10
const nowDay = () => {
const days = ['sun', 'mon', 'tues', 'wednes', 'thurs', 'fri', 'satur'];
return days[nowJST.getDay()];
};
console.log(nowDay());
// sun
}
参考
Node.js
Python