はじめに
開発中、現在の日付に+1日追加する実装をしていました。
月が替わる末日に1日追加すると次月の1日になることを期待していましたが、単純に末日+1日追加(31日+1日=32日)されしまい、意図した挙動にならない症状が発生しましたので、こちらの原因と解決方法について共有させていただきます。
【修正前のコード】
.ts
export function formattedDate (date: Date) {
const jstTime = date.getTime() + 9 * 60 * 60 * 1000;
const jstDate = new Date(jstTime);
const year = jstDate.getUTCFullYear();
const month = String(jstDate.getUTCMonth()+1).padStart(2, '0');
const day = String(jstDate.getUTCDate() +1).padStart(2, '0'); // ← ここが原因
return `${year}-${month}-${day}T00:00:00+09:00`;
}
getUTCDate()で取得した日付に単純に+1日しているだけなので31日の場合、32日になってしまっていました。
解決方法
先にsetDateで日付を+1日にした状態で日付を取得する
.ts
export function formattedDate (date: Date) {
const jstTime = date.getTime() + 9 * 60 * 60 * 1000;
const jstDate = new Date(jstTime);
jstDate.setUTCDate(jstDate.getUTCDate() + 1); // ← 追加
const year = jstDate.getUTCFullYear();
const month = String(jstDate.getUTCMonth()+1).padStart(2, '0');
const day = String(jstDate.getUTCDate()).padStart(2, '0'); // ← 修正
return `${year}-${month}-${day}T00:00:00+09:00`;
}
参考
おわりに
これで意図した挙動になりました。
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼