日付フォーマット一覧:Python・PHP・Go・Excelの記号を比較

書く言語がPythonからPHPやGoへ変わるたびに、日付の記号を改めて調べていないでしょうか。この記事の早見表に「月」や「%m」のように探したい要素か記号を入れるだけで、他の言語での書き方が同じ行に表示されます。

日付フォーマットの記号を曜日やタイムゾーンまで5つの環境で並べた一覧表

早見表は5分類(収録44行)

年・月・日(10行)
4桁の年・0埋めの月・月の英語名・0埋めしない日など
曜日・通算日・週(10行)
曜日の略称と数字、および年内の通算日とISO 8601の週番号
時・分・秒(10行)
24時間制と12時間制・午前と午後・経過時間
小数秒・タイムゾーン(10行)
ミリ秒とマイクロ秒、およびUTCとの差とタイムゾーン名
よく使う形式(4行)
yyyymmdd・年-月-日・日時・ISO 8601

早見表では、日付と時刻の要素ごとにJavaScript・Python・Go・PHP・Excelの書き方を横の列で比較できます。左端の「表すもの」列に要素と出力の例を書き、「表すもの」列の右に5環境の列を置き、曜日は略称・正式名・数字の出し方を別々の行に分けています。

「%Y」「2006」「yyyy」のような記号や「月」「曜日」など要素名は、検索用の入力フィールドに入力可能です。入力した語はブラウザの中で処理され、外部へは送信されません。記号で検索するとその記号の行に他の言語での書き方が表示されるので、書き換えの対応表として使うことができます。

表にある「—」は、該当する環境では1つの記号で書くことができない要素を表します。たとえばPythonの公式ドキュメントにある表には0埋めしない月の記号が無いので、該当する行ではPythonの列が「—」です。

年月日と時分秒の書式をPythonとPHPで比較

書式はPythonならdatetimeのstrftimeに、PHPならdate関数かDateTimeのformatに指定します。どちらも書式の文字列に記号を並べて指定し、記号以外の文字はそのまま出力されます。

Pythonの記号はどれも%で始まり、年月日は%Y-%m-%dで時分秒は%H:%M:%Sと書きます。PHPは%を付けずに英字1文字で書くので、同一の日時がY-m-d H:i:sになります。

PHPでは英字がそのまま記号になるため、書式に英字を文字として入れたいときは直前にバックスラッシュを置きます。Pythonは%の付いた組だけが記号なので、英字をそのまま書くことができます。

from datetime import datetime
datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 2026-09-26 15:04:05
<?php
echo date("Y-m-d H:i:s"); // 2026-09-26 15:04:05

JavaScriptはIntl.DateTimeFormatで要素を選ぶ

JavaScriptには、%Yやyyyyのように記号を並べて書式を作る仕組みがありません。代わりに、年・月・日などの要素ごとの表し方をオプションとしてIntl.DateTimeFormatに指定します。早見表ではJavaScriptの列に、このオプションの指定方法を記載しています。

年・日・時・分・秒には"numeric"か"2-digit"を指定します。月だけは、数字のほかに"long"(September)・"short"(Sep)・"narrow"(S)で名前を出すことができます。

new Intl.DateTimeFormat("ja-JP", {
  year: "numeric", month: "2-digit", day: "2-digit",
  hour: "2-digit", minute: "2-digit", hourCycle: "h23",
}).format(new Date()); // 2026/09/26 15:04

要素の順序と区切りの記号は、第1引数のロケール(言語と地域の指定)によって変わります。同じオプションを指定しても"ja-JP"なら年/月/日の順で出力され、"en-US"なら月/日/年の順で出力されます。

区切りの記号はIntl.DateTimeFormatのオプションでは指定できません。区切りまでご自身で定めたい場合は、Dateから年・月・日を1つずつ取り出して組み立てます。手順はyyyymmdd形式の日付をJavaScriptで作るの部分にあります。

The following is a list of all the format codes that the 1989 C standard requires, and these work on all platforms with a standard C implementation. — strftime() and strptime() Format Codes より
公式情報を見る →

日付フォーマットは大文字と小文字の書式で月と分を書き分ける

月と分の記号(間違えやすい組み合わせ)

Python
月は%mで分は%M(大文字と小文字で分ける)
PHP
月はmで分はi(Mは月を表す英語の略称)
Excel
mもmmも置く場所によって月にも分にもなる
Go
月は01で分は04(数字で分ける)

日付フォーマットの記号で一番間違えやすいのは月と分で、どちらも英語の頭文字がMなのでPythonとExcelでは月にも分にもmの字を使います。見分ける目印はPythonなら大文字と小文字、Excelなら置き場所です。Goは数字で分け、PHPは分に別の字iを使います。

エクセルの表示形式ではmmが月にも分にもなる

エクセル(Excel)の表示形式では、mとmmが月と分の両方を表します。ただし、どちらになるかは記号の置き場所によって変わり、hまたはhhの直後にあるmとssの直前にあるmは分になり、他のmは月として処理されます。

yyyy/mm/dd hh:mm:ssと書いたとき、1つ目のmmは年と日のあいだにあるので月になり、2つ目はhhの後ろにあるので分になります。hh:mmだけのときやmm:ssのように秒の前に書いたときも、mmは分として表示されます。

分を出したいのに月の数字が表示されたときは、mmの前にhかhhがあるかと後ろにssがあるかを見ればどちらで読まれたかを判別できます。mmだけを書いた表示形式は時刻のセルに使っても月として処理されます。

エクセルで日付の表示を別の表記に変更する処理は、関数でも書くことができます。関数ごとの対応は「スプレッドシートの関数一覧 エクセルとの違いと独自の関数を検索」にまとめています。

strftimeとPHPのdateで分を書く記号

Pythonのstrftimeは大文字と小文字で月と分を分けていて、小文字の%mが月で大文字の%Mが分です。秒の%Sも大文字なので時刻の部分は%H:%M:%Sと大文字がそろいます。

PHPのdate関数で分を表す記号はiのほうで、大文字のMは分ではなくSepやJanなど月を表す英語の略称を出します。Pythonの%H:%M:%SをPHPへ移すときは%を削除しただけのH:M:Sにはせず、H:i:sと書き換えます。

月と分のほかにも大文字と小文字で意味が変わる記号があります。PHPでは小文字のdが日で大文字のDが曜日の略称となり、小文字のyは2桁の年で大文字のYは4桁の年です。

Pythonの%yと%Yも同じ組み合わせです。大文字と小文字を入れ替えただけの記号は、早見表で1度チェックしてから使うのが確実です。

"h" または "hh" コードの直後、または "ss" コードの直前に "m" を使用すると、Excel は月ではなく分を表示します。 — 日付と時刻のコードの説明より
公式情報を見る →

Goの日付フォーマットは2006-01-02の基準時刻で指定

Goの基準時刻(2006年1月2日15時04分05秒)の読み方

年
2006(4桁)・06(2桁)
月・日
月は01 / 1 / Jan / January、日は02 / 2 / _2
曜日
Mon・Monday
時・分・秒
時は15(24時間制) / 03 / 3。分は04 / 4、秒は05 / 5
UTCとの差
-0700・-07:00・Z07:00(GMTから7時間西)

Goの日付フォーマットには%Yやyyyyのような記号がなく、2006年1月2日15時04分05秒という固定の日時を出したい表示に合わせて並べて書式にします。Goのtimeパッケージではこの日時を基準時刻と呼んでLayoutという定数に入れています。

Goの基準時刻2006-01-02Monは年月日と曜日に対応

基準時刻を「1月2日3時4分5秒・2006年・UTC(協定世界時)との差-7時間」の順に並べると「01/02 03:04:05PM '06 -0700」になります。月から時差までに含まれる7つの要素には、1から7の数字が順に割り振られているので、この番号の順で覚えておくと記号を思い出しやすくなります。

-0700は、たとえば米国太平洋岸の夏時間(PDT)のUTCとの差です。この地域の時刻は、時差を変換するツールで日本時間へ変換することができます。

書式に2006-01-02と並べたときの出力は年-月-日の順になり、15:04:05と並べれば時:分:秒になります。0埋めの月は01で0埋めしない月は1です。

日なら02と2を使い12時間制の時なら03と3を使うのに対して、24時間制の時は15と書きます。曜日は基準時刻の日が月曜日なので略称ならMonで省略しないならMondayです。

書式内の数字がどう読まれるかは、基準時刻でどの部分に該当するかで定まり、日のつもりで03と書いてもGoは03を12時間制の時と読みます。基準時刻の一部と読めない文字はそのまま出力されますが、数字は1つ変更するだけで意味が変わるので書式の数字は基準時刻からそのまま写すのが安全です。

t := time.Now()
t.Format("2006-01-02 15:04:05") // 2026-09-26 15:04:05
t.Format("2006年1月2日(Mon)")    // 2026年9月26日(Sat)

RFC3339などの定数でISO 8601形式に変換

よく使う書式はtimeパッケージに定数として用意されています。定数time.RFC3339は日付と時刻のあいだにTを挟み、末尾にUTCとの差を加えたISO 8601の書式で、中身は2006-01-02T15:04:05Z07:00です。

書式のZ07:00はUTCの時刻に対してはZを出し、UTC以外なら+09:00のような時差を出します。-07:00と書いた場合はUTCのときも+00:00が出ます。

日付だけを出すときはtime.DateOnly(2006-01-02)が使え、時刻だけならtime.TimeOnly(15:04:05)があります。time.DateTime(2006-01-02 15:04:05)は日付と時刻を空白で区切った書式で、Tを使わないのでISO 8601の書式にはなりません。

The reference time used in these layouts is the specific time stamp: 01/02 03:04:05PM '06 -0700 (January 2, 15:04:05, 2006, in time zone seven hours west of GMT). — Constants の説明より
公式情報を見る →

yyyymmddやISO 8601の日時フォーマットを出力する方法

2026年9月26日15時04分05秒(日本時間)を2つの形式で書いた例

yyyymmdd
20260926
ISO 8601
2026-09-26T15:04:05+09:00

ファイル名やデータのやり取りでよく使う形式の書き方は、環境ごとに次のとおりです。ここで紹介する書式は早見表の「よく使う形式」の分類にすべて収録しています。

yyyymmdd形式の日付をJavaScriptで作る

yyyymmddは4桁の年と2桁ずつの月・日を区切りなしで続けて書いた8桁の表記で、2026年9月26日なら20260926になります。数字の大小が日付の前後と一致するので、ファイル名の先頭に追加すれば、名前順に並び替えるだけで日付順になります。

yyyymmddはPythonなら%Y%m%dでPHPならYmdと書いて出力します。Goでは20060102と書きExcelではyyyymmddと書きます。

JavaScriptではIntl.DateTimeFormatで区切りを消すことができないので、Dateから年・月・日を1つずつ取り出して組み立てる必要があります。getMonth()は1月を0で表すため、1を加えてから2桁にそろえます。

const d = new Date();
const yyyymmdd =
  d.getFullYear() +
  String(d.getMonth() + 1).padStart(2, "0") +
  String(d.getDate()).padStart(2, "0"); // 20260926

書類に記載する日付は西暦を和暦に変換して書くこともあります。和暦の年は「2026年は令和何年?西暦を令和に換算する計算方法と和暦の早見表」の表で元号と西暦の対応を1年ずつチェックできます。

ミリ秒やタイムゾーンつきの日時フォーマットを指定

ISO 8601の日時は日付と時刻をTで区切り、末尾にUTCとの差を追加します。日本時間なら2026-09-26T15:04:05+09:00です。

環境 ISO 8601(UTCとの差つき)
Python %Y-%m-%dT%H:%M:%S%:z
Go time.RFC3339
PHP c

Pythonの%zはコロンなしの+0900を出力します。コロンつきの+09:00を出す%:zはPython 3.12で追加された記号です。

PHPではcの1文字でISO 8601の日時が出て、UTCとの差だけを出す記号はコロンなしならOでコロンつきならPです。UTCの時刻をZで出したいときはPHP 8.0.0で追加されたpを使います。

3桁のミリ秒はPHPならvで出せてGoなら.000と書きます。Goは小数点以下に並べた0の数がそのまま桁数になり、9を並べると末尾の0を省きます。

Pythonの%fは常にマイクロ秒の6桁です。JavaScriptはfractionalSecondDigitsに1から3の数を渡し、Excelはss.00のように秒の後ろに小数点と0を書きます。

ISO 8601 date. Only compatible with the non-expanded format (up to year 9999). — format character c の説明より
公式情報を見る →

FAQ

日付フォーマットで曜日を出すにはどう書きますか?
略した曜日を出す記号はPythonなら%aでPHPならDとなり、GoではMonでExcelではdddです。省略しない曜日はPythonの%AとPHPのl(小文字のエル)で出すことができ、GoならMondayでExcelならddddです。JavaScriptでは、weekdayオプションに"short"か"long"を指定します。Pythonの%aと%Aはロケールに合わせた曜日名を出力するので、日本語のロケールでは日本語の曜日になります。
0埋めしない月や日はどう書きますか?
0埋めしない月と日の記号はPHPならnとjで、Goなら1と2です。Excelの表示形式ではmとdを使い、9月5日なら「9」「5」のように1桁のまま出ます。JavaScriptはmonthやdayに"numeric"を指定します。Pythonの公式ドキュメントにある表には0埋めしない記号が掲載されておらず、その書き方を使うことができるかどうかは動作させる環境によって変わります。