$dateFromString(字符串转日期)
最后更新:2026-10-09
$dateFromString(字符串转日期)
$dateFromString 按指定格式把字符串解析为日期,是 $dateToString 的逆操作,常用于把导入数据或前端传来的日期字符串转为 BSON Date。format 使用与 $dateToString 相同的占位符(%Y、%m、%d 等),缺省按 ISO 8601 解析。解析失败时可指定 onError 兜底值,输入为 null 时可指定 onNull 兜底值。timezone 决定不含时区信息的字符串被解释为哪个时区。
| 分类 | 日期 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $dateFromString: { dateString: <日期字符串>, format: <格式串>, timezone: <时区>, onError: <默认值>, onNull: <默认值> } }
⚙️ 参数
| 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字符串格式不固定怎么解析?
A不传 format 时按 ISO 8601 尝试解析;格式固定时尽量显式指定 format。
Q解析失败会报错吗?
A会,除非指定 onError 提供兜底值。
Q和 $toDate 有什么区别?
A$toDate 只做宽松的类型转换,$dateFromString 可精确控制格式与时区。