1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Next.js】あり得ない日付が取得されてしまう

Posted at

はじめに

 開発中、現在の日付に+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では、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?