express - Mongoose 以 UTC 保存,但需要在不同时区检索取决于用户时区
问题描述
Mongoose 以 UTC 格式保存所有日期,这没关系。
每个用户都有一个特定的时区。它存储在用户的文档中。
我想将任何文档发送给客户,并在用户的时区转换日期。
我知道如何格式化一个值,但我正在寻找一种解决方案来避免逐个转换。
变通解决方案将是客户端上针对每个值或递归修改响应的传递转换函数。
有什么想法吗?
解决方案
您可以在聚合中执行此操作。
假设您有以下数据:
[
{
"_id": {
"$oid": "5f18b5c87f9f9c0fd8322b60"
},
"createdAt": {
"$date": "2020-07-22T21:55:20.575Z"
},
},
{
"_id": {
"$oid": "5f19efac5cfa75483865eaa2"
},
"createdAt": {
"$date": "2020-07-23T20:14:36.108Z"
},
}
]
你可以这样做:
const timezone = "America/Chicago"
Model.aggregate([
{
$set: {
localTime: {
$dateToString: {
date: "$createdAt",
timezone
}
}
},
}
]);
聚合的结果将是:
[
{
"_id": ObjectId("5f18b5c87f9f9c0fd8322b60"),
"createdAt": ISODate("2020-07-22T21:55:20.575Z"),
"localTime": "2020-07-22T16:55:20.575Z"
},
{
"_id": ObjectId("5f19efac5cfa75483865eaa2"),
"createdAt": ISODate("2020-07-23T20:14:36.108Z"),
"localTime": "2020-07-23T15:14:36.108Z"
}
]
推荐阅读
- python - 我们可以在 Python 中创建持续时间不是 24 小时的自定义时间戳吗?
- javascript - 布局=填充下一个/图像时,我可以获得宽度值吗?
- mongodb - 如何过滤两层深度的数组的数组元素?
- reactjs - 样式组件中组件组合的正确方法是什么
- javascript - 在快速路由器的每个子端点上添加身份验证检查
- node.js - 仅当用户单击按钮时,如何使用机器人框架和网络聊天打开或关闭麦克风按钮?
- concatenation - 如何组合在 Vincent 和 Altair 中创建的两个不同的地块?(如何将 2 个不同的 VEGA 图转换为一个图?)
- scala - Scala 微风.linalg Densematrix:无法分配列
- npm - 午餐 vue 原生项目时的错误问题
- python - 从 cookiecutter 创建的 Django 项目中删除 allauth