سؤال

لديّ تطبيق يخزن بيانات وقت GMT في MySQL DB مثل هذا: 2009-12-16 15:27:47.

يتم تخزين إزاحة المنطقة الزمنية للمستخدم في عمود آخر مثل هذا: -6

المنطقة الزمنية أعلاه هي GMT-6 ، وهو CST. هل هناك أي طريقة يمكنني من خلالها صدى CST (أي التاريخ ('t ") من بيانات إزاحة GMT؟

ملاحظة: يجب أن أضيف أيضًا أن المنطقة الزمنية العالمية للتطبيق يتم تعيينها باستخدام: date_default_timezone_set ('gmt') ؛

هل كانت مفيدة؟

المحلول

لسوء الحظ ، لا يوجد دائمًا منطقة زمنية واحدة لكل إزاحة GMT. العديد من التعويضات GMT لها مناطق زمنية متعددة. أيضا ، تتغير إزاحة GMT أثناء DST (عند الاقتضاء). على سبيل المثال ، خلال DST ، حصة الولايات المتحدة/أريزونا والولايات المتحدة/الجبلية نفس إزاحة GMT ؛ ومع ذلك ، خلال بقية العام ، US/Mountain و US/Arizona لا تشارك نفس إزاحة GMT. يمكنك استخدام إما DateTimeZone::listIdentifiers() أو تحقق من الدليل للحصول على قائمة بالمناطق الزمنية المدعومة في PHP.

إذا كنت تبدأ تطبيقًا من نقطة الصفر ، أقترح تخزين معرف TimeZone بدلاً من إزاحة GMT ، لكنني أعتقد أن تطبيقك قيد الإنتاج بالفعل. في هذه الحالة ، لا توجد طريقة موثوقة لعرض المنطقة الزمنية دون تحسين بياناتك.

أود أن أقترح عليك إضافة ملف timezone عمود إلى الجدول. يمكنك كتابة برنامج نصي لمرة واحدة من شأنه تعيين ملف timezone إلى بعض قائمة الإعدادات الافتراضية المحددة مسبقًا على أساس إزاحة GMT. على سبيل المثال ، إذا كان إزاحة GMT هو 8 ، فقم بتعيين timezone إلى America/Los_Angeles. أخيرًا ، قم بتغيير التطبيق الخاص بك لعرض/حفظ معرفات المنطقة الزمنية بدلاً من إزاحة GMT. قد يتسبب هذا في مشاكل لمجموعة فرعية من المستخدمين ، ولكنه يسمح لهم بتغيير المنطقة الزمنية إذا كانوا بحاجة إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top