「yyyy-mm-dd」という日付フォーマットは“業務の標準語”
日付・時間ユーティリティの中でも 「yyyy-mm-dd」形式の生成は、業務システムで最も頻繁に使われる基本機能です。 ログ、レポート、API、DB、画面表示——どの場面でも「2026-08-06」のような ISO 風フォーマットが求められます。 JavaScript の Date オブジェクトは強力ですが、そのままでは扱いづらい部分も多く、初心者がつまずきやすいポイントがいくつもあります。
ここでは、「yyyy-mm-dd を確実に生成するユーティリティ」を、例題・コード・テンプレートを交えながら丁寧に解説します。 業務でそのまま使える形に落とし込んでいきます。
yyyy-mm-dd を作るための基本:Date の“罠”を理解する
JavaScript の Date は次のように現在日時を取得できます。
const now = new Date();
JavaScriptしかし、ここから年月日を取り出すときに注意点があります。
月は 0 始まりである(最重要ポイント)
now.getMonth(); // 0〜11 を返す(1月が0)
JavaScriptつまり、画面表示や文字列化では必ず +1 が必要です。
日付要素はゼロ埋めしないと「yyyy-mm-dd」にならない
例えば、8 月は 8、3 日は 3 のように返ってきます。 そのまま結合すると "2026-8-3" のような不揃いな文字列になり、 ソートや比較が壊れます。
そのため、必ず 2 桁ゼロ埋め(padStart)が必要です。
String(3).padStart(2, "0"); // "03"
JavaScriptこの 2 点を押さえるだけで、日付フォーマットの半分は理解できています。
yyyy-mm-dd を返すユーティリティ関数(最小構成)
まずは最もシンプルで実務でも使える形を紹介します。
function formatYmd(date) {
const pad2 = (n) => String(n).padStart(2, "0");
const year = date.getFullYear();
const month = pad2(date.getMonth() + 1);
const day = pad2(date.getDate());
return `${year}-${month}-${day}`;
}
JavaScript使い方は次の通りです。
const today = new Date();
console.log(formatYmd(today)); // 例: "2026-08-06"
JavaScriptこの関数が業務で強い理由
- 常に yyyy-mm-dd を返す
- 月の +1 を内部で吸収してくれる
- ゼロ埋めを忘れない
- Date オブジェクトを渡すだけでよい
初心者がやりがちなミス(ゼロ埋め忘れ、月の +1 忘れ)をすべて吸収してくれるため、 プロジェクトのどこでも安心して使えます。
現在の日付を yyyy-mm-dd で返すユーティリティ(業務テンプレート)
業務では「今日の日付を yyyy-mm-dd で欲しい」という場面が非常に多いので、 専用の関数を用意しておくと便利です。
function todayYmd() {
return formatYmd(new Date());
}
JavaScript使い方は次の通りです。
console.log(todayYmd()); // "2026-08-06"
JavaScriptこの関数が便利な場面
- ログの「処理日」
- バッチ処理の「実行日」
- レポートの「生成日」
- API の「date パラメータ」
- DB の「日付キー」
業務コードのあちこちで使うため、 todayYmd は日付ユーティリティの“入り口”として必ず用意しておくべき関数です。
yyyy-mm-dd を使った実務テンプレート(そのまま使える)
ログ出力テンプレート
function logWithDate(message) {
console.log(`[${todayYmd()}] ${message}`);
}
logWithDate("バッチ処理を開始しました");
// [2026-08-06] バッチ処理を開始しました
レポートヘッダ生成テンプレート
function createReportHeader(title) {
return `=== ${title} (${todayYmd()}) ===`;
}
console.log(createReportHeader("売上集計"));
// === 売上集計 (2026-08-06) ===
JavaScriptAPI パラメータ生成テンプレート
function buildApiParams() {
return {
date: todayYmd(),
limit: 100,
};
}
console.log(buildApiParams());
// { date: "2026-08-06", limit: 100 }
JavaScriptこれらはすべて実務でそのまま使える形です。
yyyy-mm-dd を扱うときの“落とし穴”を深掘りする
Date のタイムゾーン問題
new Date() は 実行環境のタイムゾーン を使います。
- ブラウザならユーザーの端末のタイムゾーン
- Node.js ならサーバーのタイムゾーン
グローバルサービスでは、 「DB は UTC」「画面はローカルタイム」という設計が一般的です。
UTC の yyyy-mm-dd を作りたい場合は次のようにします。
function formatYmdUtc(date) {
const pad2 = (n) => String(n).padStart(2, "0");
const year = date.getUTCFullYear();
const month = pad2(date.getUTCMonth() + 1);
const day = pad2(date.getUTCDate());
return `${year}-${month}-${day}`;
}
JavaScriptyyyy-mm-dd は「文字列として比較できる」
"2026-08-06" < "2026-08-07" "2026-08-06" > "2026-08-05"
このように、文字列のまま大小比較ができるのが yyyy-mm-dd の強みです。 ゼロ埋めされているからこそ成立する性質で、 業務ロジックで日付比較を簡単に書けるようになります。
日付ユーティリティモジュールのテンプレート(プロジェクト向け)
プロジェクトで使いやすいように、 日付ユーティリティをひとまとめにしたテンプレートを紹介します。
export const DateUtil = {
pad2(n) {
return String(n).padStart(2, "0");
},
formatYmd(date) {
const year = date.getFullYear();
const month = this.pad2(date.getMonth() + 1);
const day = this.pad2(date.getDate());
return `${year}-${month}-${day}`;
},
todayYmd() {
return this.formatYmd(new Date());
},
formatYmdUtc(date) {
const year = date.getUTCFullYear();
const month = this.pad2(date.getUTCMonth() + 1);
const day = this.pad2(date.getUTCDate());
return `${year}-${month}-${day}`;
},
};
JavaScript使い方は次の通りです。
import { DateUtil } from "./DateUtil.js";
console.log(DateUtil.todayYmd());
console.log(DateUtil.formatYmd(new Date()));
console.log(DateUtil.formatYmdUtc(new Date()));
JavaScriptこのテンプレートをプロジェクトに置いておくだけで、 日付処理の品質が一気に安定します。
まとめ:yyyy-mm-dd は「業務の共通言語」だからユーティリティ化する価値がある
yyyy-mm-dd は、業務システムで最も使われる日付フォーマットです。 そのため、次のようなポイントをユーティリティ化しておくことが非常に重要です。
- 月の 0 始まりを吸収する
- ゼロ埋めを徹底する
- ローカル版と UTC 版を用意する
- 今日の日付を返す関数を作る
- 実務テンプレート(ログ・レポート・API)と組み合わせる
こうしておくことで、 日付処理がどの場面でも安定し、 コードの読みやすさ・保守性・再利用性が大きく向上します。
日付は毎日変わるけれど、 その扱い方はユーティリティで固定化できる。 その最初の一歩が「yyyy-mm-dd ユーティリティ」です。
