ฉันได้รับการตอบกลับจากปลายทาง Stripe API GET /invoices ที่ส่งคืนวันที่เป็นการประทับเวลา Unix ค่าตัวอย่างคือ 1573917475 ฉันต้องบันทึกค่านี้ในรูปแบบ ISO ใน Mongoose ตัวอย่าง: 2019-11-16T15:17:55 ฉันคุ้นเคยกับวิธีแปลงค่านี้เป็นค่าวันที่และเวลาที่จัดรูปแบบ ISO / UTC โดยใช้ Javascript หรือ MomentJS อย่างไรก็ตาม ฉันต้องการตั้งค่าลักษณะการทำงานนี้ใน Mongoose Schema หากเป็นไปได้
การตอบสนองของ API ที่มีค่าการประทับเวลา:
{
"period_end": 1576509475,
"period_start": 1573917475
}
สคีมาพังพอน:
new Schema({
... redacted ...
period_end: { type: Date },
period_start: { type: Date },
... redacted ...
});
ขณะนี้กำลังบันทึกวันที่ as ใน 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;
}