我有这份文件
{
'datetime_expiration': 2020-01-01T00:00:00.000+00:00
'id_profile': 1
}
当我将字段datetime_expiration
转换为字符串时
{
'$project': {
'datetime_expiration': {
'$dateToString': {
'date': '$datetime_expiration',
'format': '%Y-%m-%d',
'timezone': 'America/Sao_Paulo',
'onNull': null
}
}
}
}
mongo减去一天。结果:
{
'datetime_expiration': '2019-12-31'
'id_profile': 1
}
如您所见,在'$project'
之前我们有2020-01-01
,但在2019-12-31
之后。
为什么会这样呢?我在巴西。
答案 0 :(得分:1)
这是因为默认情况下所有日期都以UTC格式编写-请在此处检查:: MongoDB-Date,对于$dateToString
,当您经过类似'timezone': 'America/Sao_Paulo'
的时区时,它将从传入UTC日期时间,然后为您提供日期。由于您的时区为UTC-3
,因此将从2020-01-01T00:00:00.000+00:00
中减去3个小时,结果为2019-12-31T21:00:00.000+00:00
,因此日期将为'2019-12-31'
-如果您需要原样的日期,不要指定时区。
摘自$dateToString
的时区选项文档:
时区是可选的。运算结果的时区。一定是 一个有效的表达式,可解析为格式为 Olson时区标识符或UTC偏移量。如果未提供时区, 结果以UTC显示。
参考: $dateToString