أدوات المطور · محول الطابع الزمني يونكس
كيف يقوم المتصفح بتحويل حقبة إلى التوقيت المحلي باستخدام التاريخ والدولي
· كيف يعمل
الطوابع الزمنية جافا سكريبت متصفح API
لا يحتوي محول المتصفح على قاعدة بيانات خاصة بساعة الخادم أو المنطقة الزمنية؛ فهو يعتمد على كائن التاريخ وIntl API المدعوم من نظام التشغيل الخاص بك. يشرح هذا المنشور خط الأنابيب وحدوده.
من أين يحصل المتصفح على كلمة "محلي"؟ - نفس العصر يظهر بشكل مختلف على جهاز كمبيوتر محمول وهاتف في نفس الغرفة
يمكن لجهازين بجانب بعضهما البعض عرض حقبة واحدة بشكل مختلف عندما تختلف المناطق المحلية التي تم تكوينها. لا يتغير العدد الصحيح بين الكمبيوتر المحمول والهاتف؛ يقوم كل متصفح بإنشاء نفس اللحظة، ثم يوفر حقول التقويم المحلية لبيئته الخاصة. لذلك فإن كلمة "محلي" تصف القارئ، وليس خاصية محمولة داخل العصر.
ToolAcre يجعل هذه التبعية مرئية عن طريق تسمية الصف المحلي بـ `Intl.DateTimeFormat().resolvedOptions().timeZone`. لقطة الشاشة التي تشير إلى وقت ساعة واحدة وسجل الخادم الذي يشير إلى ساعة أخرى قد تكون قراءات صحيحة. قارن بين صفوف UTC أولاً؛ تُظهر مطابقة إخراج UTC أن العرض التقديمي يختلف عن اللحظة الأساسية.
التاريخ يستغرق ميلي ثانية - عقد المنشئ، لماذا يجب ضرب الثواني بالألف، والنطاق الذي يمكن أن يمثله التاريخ
JavaScript `Date` يتلقى ميلي ثانية من العصر. يقوم ToolAcre's `fromEpoch` بضرب إدخال الثواني في 1,000 ويترك إدخال المللي ثانية دون تغيير قبل إنشاء الكائن. هذا التحويل واضح لأن تمرير 1,717,243,200 مباشرة إلى `new Date` يعني حوالي عشرين يومًا بعد 1970، وليس يونيو 2024.
يرفض التنفيذ رقمًا غير محدود وأي قيمة مفسرة تتجاوز ±8.64×10¹⁵ مللي ثانية قبل التنسيق. يأتي هذا الحد من النطاق الزمني المذكور في المصدر، وليس من قاعدة البيانات أو ساعة نظام التشغيل. يمكن أن يؤدي تغيير المحدد إلى نقل قيمة عبر الحد، لذلك يخبرك الخطأ أيضًا بالوحدة التي تم تطبيقها.
UTC أدوات الوصول مقابل أدوات الوصول المحلية - getUTCHours وgetHours، وكيفية تطبيق المحرك للإزاحة
ToolAcre لا يستخرج الحقول التي تحتوي على `getUTCHours` و`getHours`؛ تعد صياغة ملحق المخطط التفصيلي أكثر تحديدًا من التنفيذ. يطلب من `Intl.DateTimeFormat` تنسيق التاريخ مرة واحدة باستخدام `timeZone: "UTC"` ومرة واحدة بدون تجاوز المنطقة. يتلقى كلا الاستدعاءين نفس قيمة المللي ثانية، لذا لا يمكن لأي منهما نقل الحدث نفسه.
هذا التمييز مهم عند تصحيح الأخطاء. إذا كانت صفوف الثواني والميلي ثانية متوافقة مع المنتج ولكن التسمية المحلية فاجأتك، فتفحص منطقة المتصفح بدلاً من إضافة ساعات إلى العصر. من شأن حساب الإزاحة اليدوي إنشاء لحظة مختلفة ثم السماح للمنسق بتطبيق القواعد المحلية مرة أخرى، مما ينتج عنه خطأ الضبط المزدوج الكلاسيكي.
UTC والتنسيق المحلي يطلب من المحرك قراءتين لتاريخ واحد
يمكن أن يثبت المحول أنه يطلب من المتصفح `resolvedOptions().timeZone`؛ ولا يمكن إثبات ما إذا كان محرك معين قد حصل على كل قاعدة منطقة زمنية من نظام التشغيل أو البيانات المجمعة أو طبقة منصة أخرى. يتعامل المصدر عمدًا مع تلك الآلات باعتبارها مسؤولية المحرك ويعود إلى عبارة "التوقيت المحلي" في حالة فشل استعلام المنطقة.
حدود الأدلة هذه مفيدة. تحدد المنطقة المسماة في النتيجة الاختيار الحالي للمتصفح، ولكنها ليست تقرير إصدار لقاعدة بيانات المنطقة الزمنية. إذا اختلفت بيئتان على تاريخ قديم، قم بتسجيل المتصفح ونظام التشغيل والمنطقة المعروضة. يوفر المحول المراقبة؛ لا يقوم بتشخيص حزمة البيانات خلف Intl.
يقوم المتصفح بالإبلاغ عن منطقة محلية، بينما يظل مصدر القاعدة الخاص به عبارة عن تفاصيل التنفيذ
بالنسبة للصف ISO، يوفر `toISOString()` سلسلة UTC مع حرف Z زائدة وثلاثة أرقام كسرية. تستخدم UTC القابلة للقراءة البشرية والصفوف المحلية منسقًا إنجليزيًا لبريطانيا العظمى مع سنة رقمية وشهر مختصر ويوم مكون من رقمين وساعة مدتها 24 ساعة. يطلب المنسق أيضًا `shortOffset`، مما يجعل جزء الإزاحة القابل للتطبيق من كل صف معروض.
تشرح هذه الاختيارات سبب كون نسخ `Date.toString()` من وحدة التحكم ليس دليلاً مكافئًا. نثرها الدقيق يعتمد على اللغة وخارج عقد إخراج هذه الأداة. يعمل ToolAcre على إصلاح خيارات العرض الخاصة به، مع السماح بتغيير المنطقة المحلية الفعلية. انسخ القيمة ISO عندما يحتاج نظام آخر إلى مقارنة مستقرة يمكن قراءتها آليًا.
مثال عملي: عصر واحد وثلاثة مخرجات - سلسلة UTC ISO ووقت منسق محليًا والإزاحة بالدقائق من getTimezoneOffset
أدخل 1,717,243,200 واختر الثواني. ينتج عن الضرب 1,717,243,200,000 مللي ثانية، والتي حددتها الاختبارات بأنها `2024-06-01T12:00:00.000Z`. يتم تنسيق الصف UTC فورًا في UTC؛ يقوم الصف المحلي بتنسيق التاريخ المتطابق في منطقة المتصفح ويسمي تلك المنطقة. تحافظ صفوف الثواني والميلي ثانية على كلا النموذجين العدديين.
يجب قراءة الساعة المحلية والإزاحة الدقيقة من الجهاز الذي يقوم بتشغيل المثال؛ إن نشر واحدة هنا قد يتظاهر بأن كل قارئ لديه نفس المنطقة. ولهذا السبب يستخدم هذا الفحص العملي التأكيد ISO كنتيجة ثابتة ويعامل الإخراج المحلي كقيمة ملحوظة. إذا كان ISO مختلفًا، قم بإعادة زيارة الوحدة المحددة قبل التحقق من إعدادات الموقع.
مثال عملي: عصر واحد، المخرجات الثلاثة ToolAcre تعرض فعليًا
لا يوفر هذا المسار محددًا لمنطقة ثالثة عشوائية. يمكن لـ `formatInZone` قبول منطقة ما داخليًا، لكن اللوحة تستدعيها بـ UTC وللمتصفح الافتراضي فقط. مقالة تدعي أنه يمكن للمستخدمين اختيار طوكيو أو نيروبي أو تورونتو سوف تصف واجهة لم يتم شحنها، على الرغم من أن Intl يمكنها دعم مثل هذا التنسيق في مكان آخر.
كما أنه لا يعرض اختيار التقويم أو تحديد اللغة أو مراجعة قاعدة بيانات المنطقة الزمنية. بالنسبة للتحويل عبر المكاتب، احتفظ بالعصر كمرساة واستخدم الأداة التي تسمي واجهتها الموثقة المنطقة المستهدفة. هنا يكون الوعد الأضيق ذا قيمة: عالمي UTC بجانب البيئة المحلية، مع عدم وجود خادم مخفي يقرر ما يعنيه المحلي.
الوجبات الجاهزة: متصفحك هو الساعة والأطلس - وكيف يستخدمه محول الطابع الزمني لنظام Unix لإظهار UTC والمحلية جنبًا إلى جنب بدون خادم
يعمل المتصفح كمحرك حسابي وبيئة عرض تقديمي. ToolAcre يحل الوحدة، وينشئ تاريخًا واحدًا، ويطلب قيمة ISO الأساسية، ثم يقوم بتنسيق UTC والقراءات المحلية جنبًا إلى جنب. ليست هناك حاجة إلى خدمة تحويل عن بعد لتنفيذ هذه الخطوات، وتحتفظ الوحدة المعروضة بعامل 1,000 القرار متاحًا للمراجعة.
عندما تختلف المخرجات عبر الأجهزة، قارن الصف ISO وملاحظة الوحدة والمنطقة المحلية المسماة بهذا الترتيب. تفصل هذه الملاحظات الثلاث بين اللحظة والحجم والعرض. إن التعامل مع الساعة المحلية كمصدر للحقيقة يؤدي إلى دمج الأسئلة الثلاثة في سؤال واحد ويجعل التحويل الصحيح يبدو خاطئًا كلما قام المشاهد بتغيير المناطق.