اذهب إلى المحتوى
  • 0

مشكلة اختلاف التوقيت ضمن mongoose في mongodb

Tamim Fahed

السؤال

لدي مستندات تحوي قيم للتاريخ ومنها القيم الافتراضية timestamps مثل حقلي created_at و updated_at بالإضافة إلى حقول أخرى تمت إضافتها إلى المستند.

ولكن المشكلة أنه يتم حفظ التوقيت بشكل متخلف في قاعدة البيانات عن توقيت جهازي، فهو دوماً يسبق التوقيت ببضع ساعات. وحتى عندما أقوم بالرفع على خادم الويب، يتخلف هذا التوقيت أيضاً عند إضافة مستندات جديدة.

كيف يقوم mongoose باختيار التوقيت؟ وهل هنالك طريقة معيّنة للتعامل مع التوقيت حتى تكون موحّدة لكل المستخدمين بغض النظر عن اختلاف تواقيتهم أو المكان الذي يتواجدون به؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

إن timestamps في mongodb هي ثابتة ومرتبطة بشكل مباشر بتوقيت unix. أما عند التعامل معها مع الكود البرمجي مثلاً node.js يقوم المفسّر في node بأخذ قيمة التاريخ حسب timezone الجهاز الذي يقوم بالتنفيذ عليه. مثلاً في حال كانت منطقتك الزمنية UTC+2 وهكذا.

لذلك قد تجد اختلاف بين القيمة التي يتم تخزينها في mongodb والقيمة التي يتم إظهارها ضمن node.js

لذلك يمكن معالجة هذه المشكلة إما بالتعامل دوماً مع التوقيت حسب Unix كمرجع ثابت للتوقيت بين قاعدة البيانات وخادم الويب لديك، أو عن طريق تعديل التوقيت بالشكل المناسب لك (أخذ منطقتك الزمنية على سبيل المثال كمرجع ثابت) وحفظها أثناء إدخال البيانات إلى القاعدة.

ولتحقيق ذلك تم إيجاد عدة حلول، منها مكتبة يمكنك إضافتها لتعمل مع mogoose وتدعى moment-timezone ويمكنك استخدامها كالتالي:

const moment = require('moment-timezone');

const myDate = moment.tz(Date.now(), "نضع هنا المنطقة الزمنية");

ثم في ال schema نكتبها بالشكل التالي:

const someSchema = new Schema(
    {
        ...
        anyDate: {type: Date, default: myDate},
        ...
    }
);

ولمعرفة اسماء المناطق الزمنية يمكنك التوجه إلى التوثيق الرسمي ل moment js.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...