gpt4 book ai didi

javascript - 使用 NodeJS 将 Unix 纪元时间戳保存为 Mongoose Schema 类型日期

转载 作者:行者123 更新时间:2023-11-30 19:02:25 26 4
gpt4 key购买 nike

我收到来自 Stripe API GET/invoices 端点的响应,该端点将日期作为 unix 时间戳返回。示例值为 1573917475。我需要在 Mongoose 中以 ISO 格式保存此值。示例:2019-11-16T15:17:55 我熟悉如何使用 Javascript 或 MomentJS 将此值转换为 ISO/UTC 格式的日期时间值。但是,如果可能的话,我想在 Mongoose Schema 中设置此行为。

包含时间戳值的 API 响应:

{
"period_end": 1576509475,
"period_start": 1573917475
}

Mongoose 模式:

new Schema({
... redacted ...
period_end: { type: Date },
period_start: { type: Date },
... redacted ...
});

这当前正在 Mongo 中保存 as 日期,其值如下:

{
"period_end": "1970-01-19T04:34:23.671+0000"
}

当年份是 1970 年时,这通常是因为输入日期格式存在问题。这种类型的转换可以在架构级别执行吗?

我看到了这个 Mongoose 文档 https://mongoosejs.com/docs/tutorials/dates.html提到在保存到模式之前转换值。但我不想手动遍历这些值,因为我正在保存来自 API 的原始响应。

编辑:使用@ambianBeing 提供的答案,我想出了以下解决方案。

new Schema({
... redacted ...
period_end: { type: Date, set: d => convertSecsToMs(d) },
period_start: { type: Date, set: d => convertSecsToMs(d) },
... redacted ...
});

function convertSecsToMs(d) {
if (!d || !isValidTimestamp(d)) return;

return new Date(d * 1000);
}

function isValidTimestamp(date) {
return new Date(date).getTime() > 0;
}

最佳答案

Mongoose 支持setters/getters在与更新操作一起使用的架构级别。

const docSchema = new Schema({
period_start: {
type: Date,
set: d => new Date(d * 1000)
},
period_end: {
type: Date,
set: d => new Date(d * 1000)
}
});

关于javascript - 使用 NodeJS 将 Unix 纪元时间戳保存为 Mongoose Schema 类型日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59379538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com