【JavaScript】現在の日付をYYYY/MM/DD形式で取得・表示する方法|DOM表示・自動更新・実践パターンまで解説

Webページに「今日の日付」を表示したい場面はよくあります。フッターの著作権年、フォームのデフォルト日付、キャンペーンページの今日の日付表示など、いずれも new Date() で取得した現在日時をフォーマットして DOM に書き込むだけで実現できます。

この記事では現在の日付を YYYY/MM/DD 形式で表示する基本的な手順から、曜日付き表示・時刻表示・setInterval を使ったリアルタイム更新、そして実務でよく使われる表示パターンまでまとめて解説します。

スポンサーリンク

new Date() で現在日時を取得する

引数なしの new Date()実行した瞬間のローカル日時を保持した Date オブジェクトを返します。

new Date() の基本
const now = new Date();

console.log(now);
// → Mon Apr 06 2026 09:30:00 GMT+0900 (日本標準時)

// 各要素の取り出し
console.log(now.getFullYear());     // 2026(4桁年)
console.log(now.getMonth() + 1);    // 4(月 ※0始まりなので +1 が必要)
console.log(now.getDate());         // 6(日)
console.log(now.getDay());          // 1(曜日:0=日〜6=土)
console.log(now.getHours());        // 9(時)
console.log(now.getMinutes());      // 30(分)
console.log(now.getSeconds());      // 0(秒)
getMonth() は 0〜11 を返すので注意:
1月=0、2月=1、…12月=11 と、月だけが0始まりです。表示用の月の数値は必ず getMonth() + 1 に直してください。他の getDate()(日)・getFullYear()(年)・getHours()(時)はそのまま使えます。

YYYY/MM/DD 形式で表示する

日付を特定のフォーマットで表示するには、各要素を取り出して文字列に組み立てます。月・日は1桁になる場合があるので padStart(2, '0') でゼロ埋めします。

YYYY/MM/DD 形式で取得する
const now = new Date();

const year  = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');  // '04'
const day   = String(now.getDate()).padStart(2, '0');        // '06'

const dateStr = `${year}/${month}/${day}`;  // "2026/04/06"
console.log(dateStr);
DOM に書き込んで表示する
// HTML: <p id="today"></p>

const now = new Date();
const year  = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day   = String(now.getDate()).padStart(2, '0');

document.getElementById('today').textContent = `${year}/${month}/${day}`;
HTML の例
<p>今日の日付: <span id="today"></span></p>

<script>
const now   = new Date();
const year  = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day   = String(now.getDate()).padStart(2, '0');

document.getElementById('today').textContent = `${year}/${month}/${day}`;
</script>

toLocaleDateString() を使う方法

ゼロ埋め処理を書かずに、ブラウザ組み込みの toLocaleDateString() でフォーマットする方法もあります。

toLocaleDateString() でフォーマット
const now = new Date();

// YYYY/MM/DD 形式(ゼロ埋めあり)
const ymd = now.toLocaleDateString('ja-JP', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
});
console.log(ymd);  // "2026/04/06"

// 日本語表記(YYYY年MM月DD日)
const jpStr = now.toLocaleDateString('ja-JP', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
});
console.log(jpStr);  // "2026年4月6日"

// 曜日付き
const withDay = now.toLocaleDateString('ja-JP', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit',
  weekday: 'short',
});
console.log(withDay);  // "2026/04/06(月)"
手法 コード量 カスタム自由度 ブラウザ依存
手動(padStart) 多め ◎ 完全自由 なし
toLocaleDateString() 少ない ○ ロケールオプションで調整 Intl API必要(主要ブラウザ○)

曜日・時刻も含めて表示する

日付だけでなく曜日や時刻も一緒に表示するパターンです。

曜日付き表示
const now = new Date();
const WEEK = ['日', '月', '火', '水', '木', '金', '土'];

const year    = now.getFullYear();
const month   = String(now.getMonth() + 1).padStart(2, '0');
const day     = String(now.getDate()).padStart(2, '0');
const weekday = WEEK[now.getDay()];  // getDay() 0=日〜6=土

console.log(`${year}年${month}月${day}日(${weekday})`);
// → "2026年04月06日(月)"
日付+時刻の表示
const now = new Date();

const year  = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day   = String(now.getDate()).padStart(2, '0');
const hours = String(now.getHours()).padStart(2, '0');
const mins  = String(now.getMinutes()).padStart(2, '0');
const secs  = String(now.getSeconds()).padStart(2, '0');

console.log(`${year}/${month}/${day} ${hours}:${mins}:${secs}`);
// → "2026/04/06 09:30:00"

setInterval で日時をリアルタイム更新する

ページを開いたままでも常に現在時刻を表示し続けたい(デジタル時計のような表示)場合は、setInterval() で定期的に DOM を更新します。

デジタル時計の実装
<div id="clock">--/--/-- --:--:--</div>

<script>
function updateClock() {
  const now   = new Date();
  const year  = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day   = String(now.getDate()).padStart(2, '0');
  const hours = String(now.getHours()).padStart(2, '0');
  const mins  = String(now.getMinutes()).padStart(2, '0');
  const secs  = String(now.getSeconds()).padStart(2, '0');

  document.getElementById('clock').textContent =
    `${year}/${month}/${day} ${hours}:${mins}:${secs}`;
}

// 即座に1回実行してから、1秒ごとに更新
updateClock();
const timerId = setInterval(updateClock, 1000);

// ページを離れるときタイマーを停止(メモリリーク防止)
window.addEventListener('beforeunload', () => clearInterval(timerId));
</script>
デジタル時計のスタイル例
#clock {
  font-family: 'Courier New', monospace;
  font-size: 1.5rem;
  font-variant-numeric: tabular-nums;  /* 数字幅を均等にして桁ずれを防ぐ */
  letter-spacing: 0.05em;
  color: #1e293b;
}
font-variant-numeric: tabular-nums について:
デジタル時計では秒数が変わるたびに「1」「2」「10」などの幅が変わり、テキストが横にずれます。font-variant-numeric: tabular-nums を指定すると、すべての数字が同じ幅で描画され、ちらつきを防げます。

実践:よく使われる表示パターン

現在の日付表示が使われる具体的な実装例をまとめます。

フッターの著作権年を自動更新
<!-- 固定年 + 現在年で「2020 - 2026」と表示する -->
<footer>
  <p>&copy; 2020 - <span id="copy-year"></span> My Website</p>
</footer>

<script>
document.getElementById('copy-year').textContent = new Date().getFullYear();
</script>
フォームの日付入力にデフォルト値を設定
<!-- input[type="date"] のデフォルト値には YYYY-MM-DD 形式が必要 -->
<input type="date" id="dateInput">

<script>
const now   = new Date();
const year  = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day   = String(now.getDate()).padStart(2, '0');

// input[type="date"] は YYYY-MM-DD 形式(スラッシュではなくハイフン)
document.getElementById('dateInput').value = `${year}-${month}-${day}`;
</script>
input[type=”date”] の value は YYYY-MM-DD 形式:
input[type="date"] に設定する value は YYYY/MM/DD(スラッシュ)ではなく YYYY-MM-DD(ハイフン)でなければなりません。スラッシュ区切りを設定しても表示上は変わらず、値が無効として扱われます。
ページ上部に「今日の日付」を表示
<div class="today-banner">
  <span id="today-date"></span>
  <span>現在のキャンペーン実施中</span>
</div>

<script>
const now  = new Date();
const WEEK = ['日', '月', '火', '水', '木', '金', '土'];

const year    = now.getFullYear();
const month   = String(now.getMonth() + 1).padStart(2, '0');
const day     = String(now.getDate()).padStart(2, '0');
const weekday = WEEK[now.getDay()];

document.getElementById('today-date').textContent =
  `${year}年${month}月${day}日(${weekday})`;
</script>

DOMContentLoaded と組み合わせて安全に実行する

JavaScript を <head> 内や <body> の途中に書く場合、対象の要素が DOM に存在しないうちに getElementById() を呼ぶと null が返ってエラーになります。

DOMContentLoaded でスクリプトを安全に実行
// head タグ内や body 冒頭に書いてもエラーにならない
document.addEventListener('DOMContentLoaded', () => {
  const now   = new Date();
  const year  = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day   = String(now.getDate()).padStart(2, '0');

  const el = document.getElementById('today');
  if (el) {
    el.textContent = `${year}/${month}/${day}`;
  }
});
スクリプトの配置場所ガイドライン:

  • </body> の直前に書く場合 → DOMContentLoaded 不要(要素は既にある)
  • <head> 内に書く場合 → DOMContentLoaded または defer 属性が必要
  • 外部JSファイルの場合 → <script src="..." defer></script> で defer を付けると安全

よくある質問(FAQ)

Q日付が1日ずれて表示されます。原因は何ですか?
A最も多い原因は文字列からのパース時の「タイムゾーンずれ」です。new Date('2026-04-06') のようにハイフン区切りの日付文字列を渡すと UTC の 0時として解釈され、JST(UTC+9)では前日の15時になるため日付がずれます。現在日時なら new Date()(引数なし)を使う限りはずれません。文字列からの変換については日付フォーマット変換ガイドで詳しく解説しています。
Qページを開いたまま日付が変わっても自動で更新されますか?
Aconst now = new Date() はその行が実行された瞬間の日時を返します。ページ読み込み時に1回だけ実行した場合、その後日付が変わっても表示は更新されません。日付が変わるタイミングでも正確な日時を表示し続けたい場合は、この記事で紹介した setInterval(updateClock, 1000) を使って毎秒再取得・再描画する方式を採用してください。
QinnerHTMLtextContent のどちらを使うべきですか?
A日付文字列のように HTML タグを含まないテキストを設定する場合は textContent を使ってください。innerHTML は文字列を HTML として解釈するため、万が一ユーザー入力を混入させると XSS(クロスサイトスクリプティング)脆弱性につながります。new Date() の出力は安全ですが、習慣として textContent を使うことをおすすめします。
Qゼロ埋めの padStart(2, '0') の代わりに古い if (month < 10) 書き方は問題ありますか?
A動作上は問題ありませんが、padStart() の方が意図が明確で短く書けます。String(month).padStart(2, '0') は「文字列を最低2文字にし、不足分を先頭の ‘0’ で埋める」という意味で、if 分岐より可読性が高いため現代のJavaScriptでは padStart が推奨されます。
Qサーバー側の日付ではなく、必ずユーザーの現地時刻を表示したい場合は?
Anew Date() はクライアント(ブラウザ)の OS 設定に基づくローカル日時を返します。サーバー時刻との同期が不要な「今日の日付を UI に表示する」用途なら new Date() で問題ありません。サーバーと同期した正確な時刻が必要な場合は、サーバー API から現在時刻を取得して表示する方式を採用してください。

まとめ

やりたいこと コード
YYYY/MM/DD 取得 `${y}/${m}/${d}`(padStart でゼロ埋め)
DOM に書き込む el.textContent = dateStr
曜日付き表示 WEEK[now.getDay()] で配列から取得
フォームのデフォルト値 YYYY-MM-DD 形式(ハイフン)で .value に設定
著作権年の自動更新 new Date().getFullYear()
リアルタイム更新 setInterval(update, 1000)
スクリプト配置が body 上部 DOMContentLoaded または defer

YYYY/MM/DD 以外のフォーマット変換(ISO 8601・時刻・タイムゾーン・汎用 formatDate() 関数など)は日付のフォーマットを変換する完全ガイドで詳しく解説しています。日数差の計算や加算・減算などの日付操作についてはJavaScriptで時間の計算をマスターしようも参照してください。