Saya menerima tanggapan dari titik akhir Stripe API GET /invoices yang mengembalikan tanggal sebagai cap waktu unix. Contoh nilai adalah 1573917475. Saya perlu menyimpan nilai ini dalam Format ISO di Mongoose. Contoh: 16-11-2019T15:17:55 Saya memahami cara mengonversi nilai ini menjadi nilai waktu tanggal berformat ISO/UTC menggunakan Javascript atau MomentJS. Namun, saya ingin mengatur perilaku ini dalam Skema Mongoose jika memungkinkan.
Respons API yang berisi nilai stempel waktu:
{
"period_end": 1576509475,
"period_start": 1573917475
}
Skema Luwak:
new Schema({
... redacted ...
period_end: { type: Date },
period_start: { type: Date },
... redacted ...
});
Saat ini menyimpan tanggal di Mongo dengan nilai seperti:
{
"period_end": "1970-01-19T04:34:23.671+0000"
}
Kalau tahun 1970 biasanya karena ada masalah dengan format tanggal input. Bisakah konversi jenis ini dilakukan pada tingkat Skema?
Saya melihat dokumentasi Mongoose ini https://mongoosejs.com/docs/tutorials/dates.html yang menyebutkan konversi nilai sebelum disimpan ke skema. Namun saya memilih untuk tidak mengulang nilai secara manual karena saya menyimpan respons mentah dari API.
Edit: Menggunakan jawaban yang diberikan oleh @ambianBeing saya menemukan solusi berikut.
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;
}