O conceito básico aqui é tornar sua consulta "consciente" de quando o "horário de verão" "inicia" e "termina" para um determinado período de consulta e simplesmente fornecer este teste para
$cond
para determinar qual "deslocamento" usar:db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
Portanto, você pode tornar isso um pouco mais complexo ao cobrir vários anos, mas ainda é o princípio básico. No hemisfério sul você está sempre abrangendo um ano, de modo que cada condição seria um "intervalo" de "início" a "fim do ano" e "início do ano" a "fim". Portanto, um
$or
com um $and
interno dentro do "intervalo" demonstrado pelos operadores. Se você tiver valores diferentes para aplicar, detecte quando "deve" escolher um deles e aplique usando
$cond
.