日時フォーマット横断検索
JavaScript / Python / Go / PHP / Excel の日時フォーマット文字列を横断比較
yyyydate-fns の format() で使用
* Intl: { year: "numeric" }
%Ystrftime() で4桁の西暦年
2006参照時刻の年部分を使用
* Go の参照時刻: 2006年
Ydate() で4桁の西暦年
yyyyセルの表示形式で4桁年
比較メモ: Go だけが数値リテラル「2006」を使う独特な方式。他の言語は記号ベースのフォーマット文字列。
yydate-fns の format() で使用
* Intl: { year: "2-digit" }
%ystrftime() で下2桁の年
06参照時刻の年の下2桁
* Go の参照時刻: 06 = 2006の下2桁
ydate() で下2桁の年
yyセルの表示形式で2桁年
比較メモ: 2000年問題の教訓から、2桁年の使用は非推奨。ログや表示にはなるべく4桁年を使うべき。
new Intl.DateTimeFormat("ja-JP-u-ca-japanese", { era: "long", year: "numeric" })Intl API で和暦カレンダーを指定
(ライブラリ必要)標準ライブラリでは非対応
* jaconv や独自実装が必要
(独自実装)標準ライブラリでは非対応
* 和暦変換は自前のロジックで実装
(IntlDateFormatter)IntlDateFormatter で和暦カレンダーを指定
* intl 拡張が必要
[$-ja-JP-x-gannen]ggge"年"セルの表示形式で和暦
* ロケール依存
比較メモ: JavaScript の Intl API が最も手軽に和暦を扱える。Python・Go は標準では非対応。
MMdate-fns の format() で使用
* Intl: { month: "2-digit" }
%mstrftime() でゼロ埋め月(01〜12)
01参照時刻の月部分(ゼロ埋め)
* Go の参照時刻: 01 = 1月
mdate() でゼロ埋め月(01〜12)
mmセルの表示形式でゼロ埋め月
* 時刻の直後に置くと「分」と解釈される場合あり
比較メモ: Go は「01」、PHP は「m」と、ゼロ埋めがデフォルト。JavaScript の date-fns は大文字 MM。
Mdate-fns の format() で使用
%-mstrftime() でゼロ埋めなし月
* Windows では %#m を使用
1参照時刻の月部分(ゼロ埋めなし)
* Go の参照時刻: 1 = ゼロ埋めなし月
ndate() でゼロ埋めなし月(1〜12)
mセルの表示形式でゼロ埋めなし月
比較メモ: Python の %-m は Linux/macOS のみ。Windows では %#m を使う必要がある点に注意。
MMMMdate-fns の format() で使用
* Intl: { month: "long" }。ロケールで日本語も可
%Bstrftime() で英語フル月名
* ロケール依存。locale.setlocale() で変更可
January参照時刻の月名をそのまま使用
* Go の参照時刻: January = フル月名
Fdate() で英語フル月名
mmmm英語の月名フル表記
* Excelのロケール設定による
比較メモ: Go は参照時刻の月名「January」をそのまま書く。PHP は「F」という覚えにくい1文字。
MMMdate-fns の format() で使用
* Intl: { month: "short" }
%bstrftime() で英語短縮月名
Jan参照時刻の短縮月名を使用
* Go の参照時刻: Jan = 短縮月名
Mdate() で英語短縮月名
mmm英語の月名短縮表記
dddate-fns の format() で使用
* Intl: { day: "2-digit" }
%dstrftime() でゼロ埋め日(01〜31)
02参照時刻の日部分(ゼロ埋め)
* Go の参照時刻: 02 = 2日
ddate() でゼロ埋め日(01〜31)
ddセルの表示形式でゼロ埋め日
ddate-fns の format() で使用
%-dstrftime() でゼロ埋めなし日
* Windows では %#d を使用
2参照時刻の日部分(ゼロ埋めなし)
* Go の参照時刻: 2 = ゼロ埋めなし日
jdate() でゼロ埋めなし日(1〜31)
dセルの表示形式でゼロ埋めなし日
date-fns: getDayOfYear(date)date-fns の getDayOfYear() 関数を使用
%jstrftime() で通算日(001〜366)
* ゼロ埋め3桁
date.YearDay()time.Time の YearDay() メソッド
* フォーマット文字列ではなくメソッド呼び出し
zdate() で通算日(0〜365)
* 0始まりなので +1 が必要な場合あり
=A1-DATE(YEAR(A1),1,0)数式で計算する
* 表示形式では直接対応なし
比較メモ: PHP の z は 0 始まり(0〜365)、Python の %j は 1 始まり(001〜366)なので変換時に注意。
HHdate-fns の format() で使用
* Intl: { hour: "2-digit", hour12: false }
%Hstrftime() で24時間表記(00〜23)
15参照時刻の時部分(24時間)
* Go の参照時刻: 15 = 午後3時
Hdate() で24時間表記(00〜23)
hhセルの表示形式で24時間表記
* 表示形式の設定による
比較メモ: Go は「15」(参照時刻の午後3時)で24時間表記を表す。他は H や %H。
hhdate-fns の format() で使用
* Intl: { hour: "2-digit", hour12: true }
%Istrftime() で12時間表記(01〜12)
3参照時刻の時部分(12時間・ゼロ埋めなし)
* ゼロ埋め不要な場合。03 ではゼロ埋め
gdate() で12時間表記(1〜12)
* h はゼロ埋めあり(01〜12)
h AM/PM表示形式で AM/PM を付加
比較メモ: AM/PM 表示は別途指定が必要な言語が多い。Excel は「AM/PM」を書式に直接書く。
adate-fns の format() で使用(小文字 pm も aa で可)
* Intl: { hour12: true } で自動付与
%pstrftime() で AM / PM
PM参照時刻の AM/PM 部分を使用
* 小文字は pm と書く
Adate() で大文字 AM / PM
* 小文字は a(am / pm)
AM/PM表示形式に AM/PM を追加
mmdate-fns の format() で使用(小文字 mm)
* Intl: { minute: "2-digit" }
%Mstrftime() でゼロ埋め分(00〜59)
04参照時刻の分部分(ゼロ埋め)
* Go の参照時刻: 04 = 4分
idate() でゼロ埋め分(00〜59)
* m は月なので注意。分は i
mmセルの表示形式でゼロ埋め分
* 時刻の直後に置くと分として認識される
比較メモ: PHP で分が「i」なのは、m が月に使われているため。Excel では mm が月か分かはコンテキストで判断される。
mdate-fns の format() で使用
%-Mstrftime() でゼロ埋めなし分
* Windows では %#M を使用
4参照時刻の分部分(ゼロ埋めなし)
* Go の参照時刻: 4 = ゼロ埋めなし分
intval(date("i"))date("i") をintval() で変換
* ゼロ埋めなし分の専用フォーマットはない
mセルの表示形式でゼロ埋めなし分
* 時刻のhの直後に使う
ssdate-fns の format() で使用
* Intl: { second: "2-digit" }
%Sstrftime() でゼロ埋め秒(00〜59)
05参照時刻の秒部分(ゼロ埋め)
* Go の参照時刻: 05 = 5秒
sdate() でゼロ埋め秒(00〜59)
ssセルの表示形式でゼロ埋め秒
SSSdate-fns の format() でミリ秒(3桁)
* Date.now() % 1000 でも取得可
%fstrftime() でマイクロ秒(6桁)
* ミリ秒は %f[:3] でスライス
.000 / .000000.000 でミリ秒、.000000 でマイクロ秒
* 末尾ゼロを省略する場合は .999 / .999999
u / vu=マイクロ秒(6桁)、v=ミリ秒(3桁)
* DateTime::format() で使用。date() では常に 000000
.000セルの表示形式でミリ秒
* ss.000 の形式で指定
比較メモ: Python の %f は常に6桁のマイクロ秒。ミリ秒が欲しい場合はスライスが必要。PHP の v はミリ秒だが PHP 7.0以降のみ。
EEEEdate-fns の format() で使用
* Intl: { weekday: "long" }。ロケール指定で日本語「月曜日」も可
%Astrftime() で英語フル曜日名
* ロケール依存。日本語環境では「月曜日」
Monday参照時刻の曜日名を使用
* Go の参照時刻: Monday(月曜日)
ldate() で英語フル曜日名
* 小文字の L
ddddセルの表示形式で曜日名フル
* ロケール依存
比較メモ: PHP の曜日は小文字の l(エル)。Go は参照時刻の「Monday」をそのまま書く。
EEEdate-fns の format() で使用
* Intl: { weekday: "short" }
%astrftime() で英語短縮曜日名
Mon参照時刻の短縮曜日名を使用
* Go の参照時刻: Mon = 短縮曜日名
Ddate() で英語短縮曜日名
dddセルの表示形式で曜日名短縮
date.getDay()Date.getDay() で 0=日曜〜6=土曜
* date-fns: getDay(date)
%w / %u%w=0(日曜)〜6、%u=1(月曜)〜7
* %u は ISO 8601準拠
date.Weekday()time.Weekday() で 0=Sunday〜6=Saturday
* フォーマット文字列ではなくメソッド
w / Nw=0(日曜)〜6、N=1(月曜)〜7
* N は ISO 8601準拠
=WEEKDAY(A1)WEEKDAY関数で取得
* 第2引数で起点を変更可能
比較メモ: 0=日曜起点(JS・PHP w・Python %w)と 1=月曜起点(ISO 8601・PHP N・Python %u)の2系統がある。
XXXdate-fns の format() で使用
* Date: getTimezoneOffset() で分単位のオフセット取得
%zstrftime() で UTC オフセット
* Python 3.6以降。コロンなしの形式
-07:00参照時刻の UTC オフセット(-7時間)
* Go の参照時刻: -07:00 = コロンあり、-0700 = コロンなし
Pdate() でコロン付き UTC オフセット
* O はコロンなし(+0900)
直接対応する機能なし
Excelのセル書式ではタイムゾーン表示非対応
比較メモ: Python の %z はコロンなし(+0900)。コロン付きが欲しい場合は手動で挿入するか strftime の代わりに isoformat() を使う。
date.toLocaleString("ja-JP", { timeZoneName: "short" })Intl で timeZoneName を指定
* IANA タイムゾーン名: Intl.DateTimeFormat().resolvedOptions().timeZone
%Zstrftime() でタイムゾーン略称
* aware datetime でないと空文字になる
MST参照時刻のタイムゾーン略称を使用
* Go の参照時刻: MST = Mountain Standard Time
Tdate() でタイムゾーン略称
直接対応する機能なし
Excelのセル書式ではタイムゾーン名非対応
比較メモ: Go は参照時刻のタイムゾーン「MST」をそのまま書く。Python は aware datetime でないと空文字になるので注意。
date.toISOString()toISOString() は常に UTC(末尾 Z)
* ローカル時刻 + オフセットは date-fns の formatISO() を使用
datetime.isoformat()isoformat() でISO 8601形式
* aware datetime で呼ぶとオフセット付き
2006-01-02T15:04:05Z07:00time.RFC3339 定数も利用可
* Z07:00: UTCなら Z、それ以外は +HH:MM
cdate("c") で ISO 8601 形式
* DateTime::ATOM 定数でも同等
直接対応する機能なし
Excelのセル書式ではISO 8601非対応。TEXT関数で近似可能
比較メモ: JavaScript の toISOString() は常に UTC。ローカル時刻+オフセットが欲しい場合は date-fns を使う。
date.toISOString()
// or date-fns:
format(date, "yyyy-MM-dd'T'HH:mm:ssXXX")toISOString() は UTC 固定。ローカルは date-fns を使用
datetime.isoformat()isoformat() で ISO 8601 出力
* timespec パラメータで精度制御可
time.RFC3339
// = "2006-01-02T15:04:05Z07:00"RFC3339 定数を使うのが一般的
c
// or DateTime::ATOMdate("c") で ISO 8601 出力
yyyy-mm-dd"T"hh:mm:ssカスタム書式で近似
* タイムゾーン情報は含められない
比較メモ: API通信やログ記録では ISO 8601 / RFC 3339 が事実上の標準。言語ごとの定数・メソッドを覚えておくと便利。
date.toLocaleDateString('ja-JP')
// or date-fns:
format(date, 'yyyy年M月d日')Intl API またはdate-fns で日本語ロケール
strftime('%Y年%-m月%-d日')
// or: f'{dt:%Y}年{dt.month}月{dt.day}日'ゼロ埋めなしにするには %-m %-d を使用
* Windows では %#m %#d
2006年1月2日参照時刻をそのまま日本語形式で記述
'Y年n月j日'n=ゼロ埋めなし月、j=ゼロ埋めなし日
yyyy"年"m"月"d"日"ダブルクォートで文字列を挟む
比較メモ: Go は「2006年1月2日」と書くだけで日本語形式になる直感的な設計。Excel はリテラル文字をダブルクォートで囲む。
date.toUTCString()toUTCString() で RFC 7231 形式(UTC)
* RFC 2822 厳密にはライブラリが必要
email.utils.format_datetime(dt)email.utils モジュールを使用
time.RFC1123Z
// = "Mon, 02 Jan 2006 15:04:05 -0700"RFC1123Z 定数を使用
rdate("r") で RFC 2822 形式
直接対応する機能なし
Excel では RFC 2822 形式の直接出力は不可
比較メモ: RFC 2822 はメールヘッダ、RFC 7231 は HTTPヘッダに使われる形式。PHP の "r" が最も手軽。
format(date, 'yyyy-MM-dd')date-fns の format() で使用
* toISOString().slice(0,10) でも可(UTC注意)
strftime('%Y-%m-%d')
// or: date.isoformat()strftime() または date.isoformat()
2006-01-02参照時刻をハイフン区切りで記述
'Y-m-d'date("Y-m-d") で出力
yyyy-mm-ddセルの表示形式で指定
比較メモ: データベースやAPIで最も多用されるフォーマット。ISO 8601 の日付部分。
format(date, 'yyyy-MM-dd HH:mm:ss')date-fns の format() で使用
strftime('%Y-%m-%d %H:%M:%S')strftime() で出力
2006-01-02 15:04:05参照時刻をスペース区切りで記述
'Y-m-d H:i:s'date() で出力
yyyy-mm-dd hh:mm:ssセルの表示形式で指定
比較メモ: MySQLのDATETIME型やログファイルで広く使われる形式。
format(date, 'yyyy/MM/dd')date-fns の format() で使用
strftime('%Y/%m/%d')strftime() で出力
2006/01/02参照時刻をスラッシュ区切りで記述
'Y/m/d'date() で出力
yyyy/mm/ddセルの表示形式で指定
比較メモ: 日本では YYYY/MM/DD が一般的。欧米の DD/MM/YYYY と混同しないよう注意。
format(date, 'dd/MM/yyyy')date-fns の format() で使用
* Intl: toLocaleDateString("en-GB")
strftime('%d/%m/%Y')strftime() で出力
02/01/2006参照時刻を DD/MM/YYYY で記述
'd/m/Y'date() で出力
dd/mm/yyyyセルの表示形式で指定
比較メモ: 日本・アメリカ(MM/DD)と混同しやすい。国際的なデータ交換では ISO 8601(YYYY-MM-DD)を推奨。
format(date, 'HH:mm:ss')date-fns の format() で使用
* Intl: toLocaleTimeString("ja-JP", { hour12: false })
strftime('%H:%M:%S')
// or: time.isoformat()strftime() または time.isoformat()
15:04:05参照時刻を時刻のみで記述
'H:i:s'date() で出力
hh:mm:ssセルの表示形式で指定
new Date('2026-04-13')
// date-fns:
parse('2026-04-13', 'yyyy-MM-dd', new Date())new Date() は ISO 8601 形式推奨
* date-fns の parse() でフォーマット指定パースも可能
datetime.strptime('2026-04-13', '%Y-%m-%d')strptime() でフォーマットを指定してパース
time.Parse("2006-01-02", "2026-04-13")Parse() の第1引数にレイアウト(参照時刻形式)を指定
DateTime::createFromFormat('Y-m-d', '2026-04-13')
// or: new DateTime('2026-04-13')createFromFormat() でフォーマット指定パース
=DATEVALUE("2026-04-13")DATEVALUE関数で文字列を日付に変換
比較メモ: Go は Parse() にも参照時刻方式のレイアウトを使う。Python は strptime(parse の p)で strftime と対になる。
new Date(1776758400 * 1000)Date() はミリ秒を受け取る
* 秒の場合は × 1000 が必要
datetime.fromtimestamp(1776758400)fromtimestamp() は秒を受け取る
* UTC: datetime.utcfromtimestamp() / datetime.fromtimestamp(ts, tz=timezone.utc)
time.Unix(1776758400, 0)Unix(秒, ナノ秒) で変換
(new DateTime())->setTimestamp(1776758400)
// or: date('Y-m-d', 1776758400)setTimestamp() で秒を指定
=A1/86400+DATE(1970,1,1)UNIXタイムスタンプ÷86400+基準日
* タイムゾーン補正: +TIME(9,0,0) for JST
比較メモ: JavaScript はミリ秒、他の言語は秒がデフォルト。変換時に ×1000 / ÷1000 を忘れやすいので注意。
new Date('2026-04-13T12:00:00+09:00')Date() は ISO 8601 を直接パース可能
* 古いブラウザでの挙動差に注意
datetime.fromisoformat('2026-04-13T12:00:00+09:00')Python 3.7以降で fromisoformat() が使える
* Python 3.10以前は末尾 Z を +00:00 に置換が必要
time.Parse(time.RFC3339, "2026-04-13T12:00:00+09:00")RFC3339 定数をレイアウトに指定
new DateTime('2026-04-13T12:00:00+09:00')DateTime コンストラクタで直接パース可能
直接対応する機能なし
Excel は ISO 8601 文字列を直接パースする関数がない。LEFT/MID で分割して DATE/TIME に渡す
比較メモ: JavaScript の Date() と PHP の DateTime() は ISO 8601 をそのまま受け付ける。Python は 3.7以降で fromisoformat() が追加された。
date-fns:
subDays(new Date(), 3)
formatDistanceToNow(date)date-fns の sub*/add* 関数で日時計算
* formatDistanceToNow() で「3日前」のような表示
datetime.now() - timedelta(days=3)
// 表示: humanize ライブラリtimedelta で日時の加減算
* 人間可読表示は humanize パッケージが便利
time.Now().AddDate(0, 0, -3)
// 表示: 独自実装AddDate(年, 月, 日) で加減算
* 「3日前」のような表示は独自実装またはライブラリ
new DateTime('-3 days')
// or: (new DateTime())->modify('-3 days')DateTime は相対表現を直接パース可能
* "next Monday", "last friday" なども対応
=TODAY()-3日付のシリアル値に直接加減算
* =NOW()-3 で時刻も含む
比較メモ: PHP が最も柔軟で、"next Monday" や "+2 weeks" のような自然言語的表現もパース可能。
よくある質問
Go の日時フォーマットが特殊なのはなぜですか?(2006-01-02 の意味)
Go は他の言語と異なり、フォーマット文字列に「参照時刻(Reference Time)」を使います。この参照時刻は「2006年1月2日 月曜日 午後3時4分5秒 -0700 (MST)」で、各数字が一意になるよう設計されています。覚え方は「1月2日 午後3時4分5秒 2006年」= 「01/02 03:04:05PM '06 -0700」と順番に並んでいること。例えば "2006-01-02" は "YYYY-MM-DD" に、"15:04:05" は "HH:mm:ss" に対応します。Go の設計者は printf スタイルの %Y や strftime のような暗号的な記号より、実際の出力例に近い形式の方が可読性が高いと考えてこの方式を採用しました。
JavaScript の日時フォーマットには何を使うべきですか?(date-fns vs dayjs vs Intl.DateTimeFormat)
現在のJavaScript開発では、主に3つの選択肢があります。(1) date-fns: Tree-shaking対応で必要な関数だけインポートでき、バンドルサイズを最小化できます。format(date, "yyyy-MM-dd") のように使います。(2) dayjs: moment.js の軽量代替として人気。dayjs().format("YYYY-MM-DD") のようにチェーン記法で使います。(3) Intl.DateTimeFormat: ブラウザ組み込みAPIでライブラリ不要。new Intl.DateTimeFormat("ja-JP").format(date) でロケール対応も簡単です。用途別のおすすめは、バンドルサイズ重視→Intl API、複雑なフォーマット→date-fns、既存プロジェクトでmoment.jsを置き換える→dayjsです。moment.js は開発終了(メンテナンスモード)なので新規採用は避けましょう。
Python の strftime と strptime はどう違いますか?
strftime (string format time) は「日時オブジェクト → 文字列」への変換、strptime (string parse time) は「文字列 → 日時オブジェクト」への変換です。名前が似ていて混同しやすいですが、f = format(出力)、p = parse(解析)と覚えましょう。使い方の例: dt.strftime("%Y-%m-%d") → "2026-04-13"(datetime → str)。datetime.strptime("2026-04-13", "%Y-%m-%d") → datetime(2026, 4, 13)(str → datetime)。フォーマット指定子(%Y, %m など)は両方で共通です。なお、Python 3.7以降では datetime.fromisoformat() でISO 8601文字列の簡易パースも可能です。
PHP の date() と DateTime::format() はどう違いますか?
date() は手続き型の関数で date("Y-m-d") のように使います。DateTime::format() はオブジェクト指向のメソッドで $dt->format("Y-m-d") のように使います。フォーマット文字列(Y, m, d, H, i, s 等)は両方で共通です。主な違いは、date() はサーバーのデフォルトタイムゾーンを使いますが、DateTime はオブジェクトごとにタイムゾーンを保持できます。また、DateTimeImmutable を使えばイミュータブルな操作が可能です。現代のPHP開発では、タイムゾーン管理の安全性からDateTime/DateTimeImmutableの使用が推奨されています。
Excel で「月」と「分」が同じ mm ですが、どう区別しますか?
Excel のカスタム書式では mm は文脈(コンテキスト)で自動判断されます。hh(時間)の直後に置かれた mm は「分」として、yyyy や dd の近くに置かれた mm は「月」として解釈されます。例: "yyyy/mm/dd" → 月、"hh:mm:ss" → 分。ただし "yyyy/mm/dd hh:mm:ss" のように両方含む場合、最初の mm は月、2番目の mm は分と正しく解釈されます。もし意図通りにならない場合は、m(ゼロ埋めなし月)と mm(ゼロ埋め月)を使い分けるか、分には必ず hh の後に配置することで対処できます。この仕様は Excel 特有で、他のプログラミング言語では月と分に別の文字を割り当てています(例: PHP は m=月、i=分)。
タイムゾーンの取り扱いは言語ごとにどう違いますか?
JavaScript: Date は内部的にUTCで保持し、表示時にローカルタイムゾーンに変換します。toISOString() は常にUTC。Intl.DateTimeFormat で任意のタイムゾーン指定が可能です。Python: naive datetime(タイムゾーン情報なし)と aware datetime(タイムゾーン付き)の2種類があり、混在させるとエラーになります。Python 3.9以降は zoneinfo モジュールが標準で使えます。Go: time.Time は常にタイムゾーン情報を保持。time.LoadLocation("Asia/Tokyo") でタイムゾーンを指定します。PHP: DateTime はタイムゾーンをオブジェクトに保持。date_default_timezone_set() でデフォルトを設定します。Excel: タイムゾーンの概念がなく、入力された日時をそのまま保持します。
データはいつ更新されますか?
最終更新日: 2026-04-13。JavaScript(date-fns/Intl API)、Python(datetime/strftime)、Go(time パッケージ)、PHP(DateTime)、Excel の主要な日時フォーマット文字列を網羅的に掲載しています。各言語の仕様変更や新機能追加があった場合は随時更新します。
ISO 8601 とは何ですか?なぜ重要なのですか?
ISO 8601 は日付と時刻の表記に関する国際規格で、"2026-04-13T12:00:00+09:00" のような形式を定義しています。重要な理由は3つあります。(1) 曖昧さがない: "04/13/2026"(アメリカ式)と "13/04/2026"(ヨーロッパ式)のような混乱が起きません。(2) ソート可能: 文字列としてそのままソートしても時系列順になります。(3) 事実上の標準: REST API、JSON、ログファイル、データベースなど、プログラム間のデータ交換では ISO 8601(およびそのプロファイルである RFC 3339)が広く採用されています。すべてのプログラミング言語に ISO 8601 の入出力機能が用意されており、本ツールでも各言語での使い方を確認できます。日時データを扱うなら、まず ISO 8601 を基本にすることをお勧めします。
逆引き・早見表ツール一覧
すべて見るこのツールについて
使い方
- 検索欄にフォーマット文字列(例: %Y, yyyy, 2006)や操作内容(例: 年, 月, ISO)を入力する
- 「JavaScript」「Python」「Go」「PHP」「Excel」のフィルターで見たい言語に絞り込む
- カテゴリドロップダウンで年・月・日・時刻・複合フォーマット等の種類別に絞り込む
- 難易度フィルター(基本・中級・応用)で自分のレベルに合ったフォーマットを探す
このツールの特徴
- ✓5つの言語/ツールを横断比較:JavaScript(date-fns / Intl API)・Python(strftime)・Go(参照時刻方式)・PHP(date())・Excel(表示形式)の同じ操作に対応するフォーマット文字列を並べて表示します
- ✓Go の参照時刻方式を詳しく解説:Go 独特の「2006-01-02 15:04:05」方式は初見では理解しにくいですが、各エントリの注釈で対応する数値の意味を補足しています
- ✓「やりたいこと」から逆引き:「4桁の年を取得したい」「ISO 8601で出力したい」など、目的からフォーマットを検索できます
- ✓出力例付きで分かりやすい:各フォーマット文字列に対して実際の出力例を表示。「この書式で何が出力されるか」が一目で分かります
- ✓比較メモで言語間の落とし穴を解説:JavaScript のミリ秒と他言語の秒の違い、Excel の mm が月か分かの判断基準など、言語間で間違えやすいポイントを補足しています
こんなときに便利
- •Python から Go に移行して、strftime の %Y-%m-%d が Go ではどう書くか分からない
- •Go の「2006-01-02 15:04:05」方式の各数字の意味を確認したい
- •PHP の date() で分を取得する文字が「i」であることを忘れた
- •API のレスポンスを ISO 8601 形式で返す方法を各言語で確認したい
- •Excel の表示形式で日時のフォーマットを設定する方法を調べたい
なぜ「日時フォーマット横断検索」が必要なのか
プログラミングで日時を扱うとき、最も困るのがフォーマット文字列の違いです。Python の %Y は Go では 2006、PHP では Y、Excel では yyyy——同じ「4桁の年」を表すのに、言語ごとにまったく異なる記法が使われています。特に Go の参照時刻方式(「2006年1月2日 15時4分5秒」の各部分を入れ替える方式)は、他の言語から移行した開発者が最初に躓くポイントです。
既存のドキュメントは「Python の strftime 一覧」「Go の time パッケージリファレンス」のように単一言語に特化したものがほとんどです。複数の言語を同時に使うプロジェクト(例: Python のバックエンド + JavaScript のフロントエンド + Excel でのデータ確認)では、言語を横断して「同じ操作がどう書かれるか」を一覧比較できるツールが必要です。
このツールは「やりたいこと」を起点に、5つの言語/ツールの日時フォーマットを一覧比較することで、言語間の移行コストを最小化し、日時処理のバグを未然に防ぐことを目指しています。
各言語の日時処理の特徴
- •JavaScript:組み込みの Date オブジェクトは機能が限定的で、フォーマット機能がありません。Intl.DateTimeFormat API でロケール対応の表示が可能ですが、細かいフォーマット指定には date-fns や dayjs などのライブラリが事実上必須です。Date.now() はミリ秒を返すため、他の言語(秒ベース)との変換時に注意が必要です。
- •Python:datetime モジュールの strftime/strptime が標準的な日時フォーマット手段です。%Y, %m, %d のような printf スタイルのフォーマット指定子を使います。タイムゾーン対応は naive/aware の区別があり、Python 3.9 以降の zoneinfo モジュールで改善されました。
- •Go:他の言語と根本的に異なる「参照時刻方式」を採用しています。「2006年1月2日 月曜日 午後3時4分5秒 -0700 (MST)」という特定の時刻の各部分をフォーマット文字列として使います。一見奇妙ですが、出力例とフォーマット文字列がほぼ同じになるため、慣れると可読性が高い設計です。
- •PHP:date() 関数で Y(年)、m(月)、d(日)、H(時)、i(分)、s(秒)のような1文字のフォーマット文字を使います。月の m と分の i が異なる文字である点は覚える必要がありますが、一度覚えれば直感的です。DateTimeImmutable クラスでイミュータブルな操作が推奨されています。
- •Excel:セルの「表示形式」で日時のフォーマットを制御します。yyyy(年)、mm(月/分)、dd(日)、hh(時)、ss(秒)を組み合わせます。mm が月か分かはコンテキスト(前後の文字)で自動判断される独特の仕様があります。プログラミング言語と異なり、タイムゾーンの概念がない点にも注意が必要です。