$dateFromString (文字列を日付に解析)
最終更新:2026-10-09
$dateFromString (文字列を日付に解析)
$dateFromString は指定したフォーマットを使って文字列を日付に解析します。$dateToString の逆関数で、インポートした日付文字列やフロントエンドの日付文字列を BSON Date に変換するのに便利です。format には $dateToString と同じプレースホルダ(%Y、%m、%d...)を使います。format を省略すると ISO 8601 として解釈されます。onError は解析失敗時のフォールバックを、onNull は入力が null のときの値を指定します。timezone は文字列にタイムゾーン情報がない場合に適用されるゾーンを決めます。
| カテゴリ | 日付 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $dateFromString: { dateString: <string>, format: <format>, timezone: <timezone>, onError: <default>, onNull: <default> } }
⚙️ パラメータ
| dateString | 必須。解析する日付文字列。 |
|---|---|
| format | 任意の書式パターン。既定は ISO 8601。 |
| timezone | 文字列にタイムゾーン情報がない場合に適用される任意のタイムゾーン。 |
| onError / onNull | 解析失敗時と null 入力時の任意のフォールバック。 |
戻り値:解析された BSON Date。失敗時は onError(既定では例外を送出)、null 入力時は onNull(既定では null)。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $dateFromString: インポートしたログのタイムスタンプを解析(北京時間)
db.imports.aggregate([
{ $project: {
createdAt: { $dateFromString: { dateString: '$ts', format: '%Y-%m-%d %H:%M', timezone: 'Asia/Shanghai' } }
} }
])
出力:
{ "_id": 1, "createdAt": ISODate("2026-09-25T08:30:00Z") }
{ "_id": 2, "createdAt": ISODate("2026-09-25T09:00:00Z") }
📌 注意事項
- format を省略すると ISO 8601 として解釈される。%z のようなプレースホルダでゾーンオフセットも解析できる
- 解析失敗は既定でエラーになる。本番では必ず onError を設定する
- ゾーン情報のない文字列は timezone に従う。既定は UTC
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Qフォーマットがまちまちな文字列を解析するには?
Aformat を省略すると ISO 8601 を試します。フォーマットが固定の場合は format を明示的に渡します。
Q解析に失敗するとエラーになりますか?
Aはい。onError でフォールバックを指定していない限りエラーになります。
Q$toDate との違いは?
A$toDate は緩い型変換です。$dateFromString はフォーマットとタイムゾーンを精密に制御できます。