Moment: هل من الممكن الاحتفاظ بالمنطقة الزمنية الخلفية؟

تم إنشاؤها على ٤ أكتوبر ٢٠١٨  ·  3تعليقات  ·  مصدر: moment/moment

وصف المشكلة وخطوات إعادة الإنتاج:
لنفترض أنني تلقيت تاريخًا من الخلفية بهذا التنسيق:

"2018-10-10T13:00:00+11:00"

ما أتوقع رؤيته في الواجهة الأمامية بعد التحليل والتنسيق:

10-10-2018 1.00 PM

ما حصلت عليه:

10-10-2018 5.00 AM

لا يهمني ما هي المنطقة الزمنية لنظامي. لا أريد أن أرى التوقيت العالمي المنسق أيضًا. كيف يمكنني تحقيقه؟

يرجى تضمين قيم جميع المتغيرات المستخدمة.

أنظر فوق.

بيئة:

لا يهم ، لا يجب أن تعتمد على البيئة. هذه هي المشكلة ، راجع للشغل ، لأنها تعتمد!

التعليق الأكثر فائدة

يمكنك تجربة parseZone :

على سبيل المثال لمنطقة زمنية محلية في توقيت جرينتش (UTC + 1)

moment.parseZone("2018-10-10T13:00:00+11:00").format(); // "2018-10-10T13:00:00+11:00"
moment.parseZone("2018-10-10T13:00:00+11:00").local().format(); // "2018-10-10T03:00:00+01:00"
moment.parseZone("2018-10-10T13:00:00+11:00").utc().format(); // "2018-10-10T02:00:00Z"

ال 3 كومينتر

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

moment("2018-10-10T13:00:00+11:00").format()
// => '2018-10-10T15:00:00+13:00'

إذا كنت تريد تعيين منطقة زمنية افتراضية للمستخدم يدويًا ، فيمكنك استخدام moment-timezone مع اسم المنطقة الزمنية لـ IANA :

moment.tz.setDefault('America/New_York');

سيؤدي ذلك إلى فرض جميع التنسيقات التي يجب إجراؤها لتلك المنطقة الزمنية وتكون مستقلة عن البيئة.

هذا رابط للمستندات: https://momentjs.com/timezone/docs/#/using -timezones / default-timezone /


ليس من الممكن معرفة المنطقة الزمنية للمستخدم من الإزاحة (لأن العديد من المناطق الزمنية يمكن أن تشترك في نفس الإزاحة ، على سبيل المثال اعتمادًا على التوقيت الصيفي) ولكن يمكنك استخدام أسماء المنطقة Etc للمناطق "العامة" ، على سبيل المثال Etc/GMT-11 في حالتك (العلامة مقلوبة لتلك المناطق). في حالتك ، قد يكون من المنطقي تخزين المنطقة الزمنية للمستخدم كإعداد واستمرارها على الخادم ، أو حفظها مع الطابع الزمني.

ثم يمكنك طباعة تاريخ واحد في منطقة زمنية معينة باستخدام على سبيل المثال

moment.tz("2018-10-10T13:00:00+11:00", "America/New_York");

شكرا simonhaenisch

لقد رأيت المكون الإضافي tz ، لكنني اعتقدت أنه يساعد في إدارة المناطق الزمنية ، مثل التحويل من واحدة إلى أخرى. ويبدو غريباً بالنسبة لي أن أستخدمها فقط لعدم لمس المنطقة الزمنية على الإطلاق :)

إذا كنت ترغب في تعيين منطقة زمنية افتراضية للمستخدم يدويًا

لسوء الحظ ، لا توجد منطقة زمنية default في الخادم. لكل مستخدم المنطقة الزمنية الخاصة به ، المحفوظة في الملف الشخصي. والواجهة الأمامية لا تعرف شيئًا عنها.

لا يمكن معرفة المنطقة الزمنية للمستخدم منذ البداية

هذا جيد ، لا يهمني المنطقة الزمنية. كل ما أحتاجه هو الاحتفاظ بالموعد القادم دون تغييرات.

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

هذا ما يحدث بالضبط. المنطقة الزمنية عبارة عن إعداد والتاريخ المحفوظ به كطابع زمني.

نظرًا لأن واجهة برمجة التطبيقات الخلفية تحت سيطرتي ، يمكنني فقط إرسال نسخة مصغرة من التاريخ ، دون إزاحة المنطقة الزمنية. اتمني ان يكون مفيدا.

ولكن ، من المثير حقًا عدم وجود شيء من هذا القبيل في اللحظة. js:

moment(somDateTime).format({ formatWithDeviceTimezone: true })

أو نوع :)

حيث يكون formatWithDeviceTimezone خطأ بشكل افتراضي.

على أي حال ، شكرًا ، الآن أرى المشكلة.

يمكنك تجربة parseZone :

على سبيل المثال لمنطقة زمنية محلية في توقيت جرينتش (UTC + 1)

moment.parseZone("2018-10-10T13:00:00+11:00").format(); // "2018-10-10T13:00:00+11:00"
moment.parseZone("2018-10-10T13:00:00+11:00").local().format(); // "2018-10-10T03:00:00+01:00"
moment.parseZone("2018-10-10T13:00:00+11:00").utc().format(); // "2018-10-10T02:00:00Z"
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

slavafomin picture slavafomin  ·  3تعليقات

tanepiper picture tanepiper  ·  3تعليقات

RobinvanderVliet picture RobinvanderVliet  ·  3تعليقات

ninigix picture ninigix  ·  3تعليقات

M-Zuber picture M-Zuber  ·  3تعليقات