4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Lambdaで当日との日付の差分を算出する [ Node.js・Python ]

Last updated at Posted at 2022-01-16

はじめ

Lambdaで、当日の日付を20220116の形にし、5日後の日付20220121を引くと、5という数字が出せるようにすることを目的として、Lambdaを作成したため、まとめます。

Lambdaコードの流れ

当日の日付

  1. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
    • ↓UTCをJSTに変換する
  2. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
    • ↓タイムスタンプに変更
  3. 1642765665851
    • ↓年、月、日のみに変換。(時間、分、秒は、切り捨て)
  4. 20210116

5日後の日付

  1. 2022-01-16 11:41:21.282791(タイムゾーンはUTC)
    • ↓日付を5日進める
  2. 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
    • ↓UTCをJSTに変換する
  3. 2022-01-21 11:41:21.282791(タイムゾーンはUTC)
    • ↓タイムスタンプに変更
  4. 1642765665851
    • ↓年、月、日のみに変換。(時間、分、秒は、切り捨て)
  5. 20210121

Lambdaの設定

Node.jsとPythonそれぞれ作成します。
スクリーンショット 2022-01-16 17.11.56.png

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

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?