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

# はじめ
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）
    - ↓タイムスタンプに変更
2. 1642765665851
    - ↓年、月、日のみに変換。（時間、分、秒は、切り捨て）
2. 20210116

### 5日後の日付

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


# Lambdaの設定
Node.jsとPythonそれぞれ作成します。
![スクリーンショット 2022-01-16 17.11.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/c7471569-e65e-6799-5972-fb4b2e3bda2b.png)

### Node.js

```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: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: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
ちなみに、時間だけの場合以下で、表示されます。
```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

https://qiita.com/holdout0521/items/c9ad545d15cfed8328d0

https://www.sejuku.net/blog/22925

https://qiita.com/kazu56/items/cca24cfdca4553269cab

https://qiita.com/Bong/items/dc632edb6fe3d44f2d5b

Python

https://qiita.com/papi_tokei/items/43b1d15a6694f576486c#datetimetimezone

https://qiita.com/7110/items/4ece0ce9be0ce910ee90