Я получаю ответы от конечной точки GET /invoices Stripe API, которая возвращает даты в виде меток времени unix. Пример значения: 1573917475. Мне нужно сохранить это значение в формате ISO в Mongoose. Пример: 2019-11-16T15:17:55 Я знаком с тем, как преобразовать это значение в значение даты и времени в формате ISO/UTC с помощью Javascript или MomentJS. Однако я хотел бы установить это поведение в схеме Mongoose, если это возможно.
Ответ API, содержащий значения отметки времени:
{
"period_end": 1576509475,
"period_start": 1573917475
}
Схема мангуста:
new Schema({
... redacted ...
period_end: { type: Date },
period_start: { type: Date },
... redacted ...
});
В настоящее время это сохраняет даты в Mongo с такими значениями, как:
{
"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;
}