MongoDB Chart新增字段转换Unix时间戳为日期时出现年份异常问题
问题排查结论
- 你使用的
$date字段存储的本身就是毫秒级Unix时间戳:常规秒级Unix时间戳为10位数字,你给出的示例值1631023883000为13位,完全满足MongoDB$toDate运算符的输入要求,无需额外做倍率转换。 - 你当前表达式中额外执行了乘以1000的操作,将时间戳放大了1000倍,得到的数值远超出正常日期的取值范围,因此生成了年份异常的错误结果。
修复方案
适配全量13位毫秒级时间戳的场景
直接移除乘法运算即可,正确表达式如下:
{$toDate: '$date'}
兼容同时存在10位秒级、13位毫秒级时间戳的场景
可以增加条件判断自动适配两种格式:
{ $toDate: { $cond: [ {$gte: [{$strLenCP: {$toString: "$date"}}, 13]}, "$date", {$multiply: ["$date", 1000]} ] } }
内容的提问来源于stack exchange,提问作者psmith
相关产品推荐
相关产品推荐

