كيفية تضمين الثواني الكسرية في عرض المدة

إظهار دقة ما دون الثانية في فترات الوقت المنسقة

مقدمة

عندما تعرض المدد بدقة ما دون الثانية، تحتاج إلى إظهار الثواني الكسرية. تعرض ساعة الإيقاف 1.234 ثانية، ويعرض محلل الأداء وقت التحميل 0.853 ثانية، ويعرض مؤقت السباق وقت الإنهاء 45.678 ثانية. بدون التنسيق المناسب، قد تكتب كوداً مثل هذا:

const seconds = 1.234;
const duration = `${seconds}s`;

ينتج هذا "1.234s" مع فاصل عشري ثابت. يرى المستخدمون الفرنسيون "1.234s" بينما يتوقعون "1,234 s" مع فاصلة كفاصل عشري. تستخدم اللغات المختلفة فواصل عشرية واصطلاحات مسافات مختلفة.

توفر JavaScript خيار fractionalDigits في Intl.DurationFormat للتحكم في كيفية ظهور الثواني الكسرية في المدد المنسقة. يشرح هذا الدرس كيفية إضافة الثواني الكسرية إلى عروض المدة والتحكم في دقتها.

ما هي الثواني الكسرية

تمثل الثواني الكسرية فترات زمنية أصغر من ثانية واحدة. تعني القيمة 1.5 ثانية ثانية ونصف. تعني القيمة 0.250 ثانية ربع ثانية.

تظهر الثواني الكسرية في ثلاثة أشكال:

  • ميلي ثانية: أجزاء من الألف من الثانية (0.001 ثانية)
  • ميكرو ثانية: أجزاء من المليون من الثانية (0.000001 ثانية)
  • نانو ثانية: أجزاء من المليار من الثانية (0.000000001 ثانية)

يتحكم خيار fractionalDigits في عدد المنازل العشرية التي تظهر بعد قيمة الثواني. يؤدي تعيين fractionalDigits: 3 إلى إظهار دقة الميلي ثانية. يؤدي تعيين fractionalDigits: 6 إلى إظهار دقة الميكرو ثانية.

تنسيق المدد بدون ثوانٍ كسرية

بشكل افتراضي، يعرض تنسيق المدة الثواني الكاملة بدون أي مكون كسري.

const duration = { hours: 0, minutes: 0, seconds: 1 };

new Intl.DurationFormat('en', { style: 'long' }).format(duration);
// "1 second"

new Intl.DurationFormat('en', { style: 'digital' }).format(duration);
// "0:00:01"

حتى إذا قمت بتضمين الميلي ثانية كوحدة منفصلة، فإنها تُعرض كوحدة مميزة بدلاً من ثوانٍ كسرية.

const duration = { seconds: 1, milliseconds: 234 };

new Intl.DurationFormat('en', { style: 'long' }).format(duration);
// "1 second and 234 milliseconds"

يعرض هذا وحدتين منفصلتين. لإظهار "1.234 ثانية" بدلاً من ذلك، تحتاج إلى خيار fractionalDigits.

إضافة الثواني الكسرية إلى المدد الزمنية

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

const duration = { seconds: 1.234 };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 3
}).format(duration);
// "1.234 seconds"

تجمع واجهة برمجة التطبيقات بين الأجزاء الصحيحة والكسرية في قيمة منسقة واحدة مع الفاصل العشري المناسب للغة المحلية.

التحكم في دقة الثواني الكسرية

يقبل خيار fractionalDigits قيماً من 0 إلى 9. يحدد هذا عدد الأرقام التي تظهر بعد الفاصلة العشرية.

const duration = { seconds: 1.23456789 };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 0
}).format(duration);
// "1 second"

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 2
}).format(duration);
// "1.23 seconds"

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 4
}).format(duration);
// "1.2346 seconds"

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 6
}).format(duration);
// "1.234568 seconds"

عندما تتجاوز الدقة المحددة الأرقام المتاحة، يقوم المنسق بالإضافة بأصفار.

const duration = { seconds: 1.5 };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 4
}).format(duration);
// "1.5000 seconds"

عندما يكون التقريب ضرورياً، يقوم المنسق بالتقريب نحو الصفر.

const duration = { seconds: 1.9999 };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 2
}).format(duration);
// "1.99 seconds"

استخدام الثواني الكسرية في التنسيق الرقمي

يعرض التنسيق الرقمي المدد الزمنية بنقطتين مثل المؤقت. تظهر الثواني الكسرية بعد قيمة الثواني.

const duration = { hours: 2, minutes: 30, seconds: 12.345 };

new Intl.DurationFormat('en', {
  style: 'digital',
  fractionalDigits: 3
}).format(duration);
// "2:30:12.345"

new Intl.DurationFormat('en', {
  style: 'digital',
  fractionalDigits: 2
}).format(duration);
// "2:30:12.34"

يعمل هذا مع أي مجموعة من وحدات الوقت في التنسيق الرقمي.

const duration = { minutes: 5, seconds: 30.678 };

new Intl.DurationFormat('en', {
  style: 'digital',
  fractionalDigits: 3
}).format(duration);
// "5:30.678"

تنسيق الثواني الكسرية في لغات محلية مختلفة

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

const duration = { seconds: 1.234 };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 3
}).format(duration);
// "1.234 seconds"

new Intl.DurationFormat('fr', {
  style: 'long',
  fractionalDigits: 3
}).format(duration);
// "1,234 seconde"

new Intl.DurationFormat('de', {
  style: 'long',
  fractionalDigits: 3
}).format(duration);
// "1,234 Sekunden"

new Intl.DurationFormat('ar', {
  style: 'long',
  fractionalDigits: 3
}).format(duration);
// "١٫٢٣٤ ثانية"

تستخدم واجهة برمجة التطبيقات الفاصل العشري الصحيح وأحرف الأرقام والمسافات لكل لغة محلية.

تنسيق أوقات ساعة الإيقاف

تحتاج تطبيقات ساعة الإيقاف إلى عرض الوقت المنقضي بدقة أقل من الثانية. استخدم التنسيق الرقمي مع الثواني الكسرية.

function formatStopwatchTime(totalSeconds) {
  const minutes = Math.floor(totalSeconds / 60);
  const seconds = totalSeconds % 60;

  const duration = { minutes, seconds };
  const locale = navigator.language;

  return new Intl.DurationFormat(locale, {
    style: 'digital',
    fractionalDigits: 2
  }).format(duration);
}

formatStopwatchTime(65.47);
// "1:05.47"

formatStopwatchTime(123.89);
// "2:03.89"

يعرض هذا الأوقات مثل "1:05.47" بمنزلتين عشريتين لدقة جزء من المئة من الثانية.

تنسيق أوقات إنهاء السباق

تعرض أنظمة توقيت الرياضات أوقات الإنهاء بدقة عالية. استخدم دقة الميلي ثانية لنتائج السباق.

function formatRaceTime(totalSeconds, locale) {
  const minutes = Math.floor(totalSeconds / 60);
  const seconds = totalSeconds % 60;

  const duration = { minutes, seconds };

  return new Intl.DurationFormat(locale, {
    style: 'digital',
    fractionalDigits: 3
  }).format(duration);
}

formatRaceTime(125.678, 'en');
// "2:05.678"

formatRaceTime(125.678, 'fr');
// "2:05,678"

تُظهر المنازل العشرية الثلاثة دقة الميلي ثانية لتوقيت دقيق للسباق.

تنسيق مقاييس الأداء

تعرض أدوات تحليل الأداء أوقات التحميل وأوقات التنفيذ بدقة أقل من الثانية. استخدم التنسيق المختصر مع الثواني الكسرية.

function formatLoadTime(seconds, locale) {
  const duration = { seconds };

  return new Intl.DurationFormat(locale, {
    style: 'short',
    fractionalDigits: 3
  }).format(duration);
}

formatLoadTime(0.853, 'en');
// "0.853 sec"

formatLoadTime(2.145, 'en');
// "2.145 sec"

يعرض هذا مقاييس الأداء بتنسيق مضغوط بدقة الميلي ثانية.

تنسيق الطوابع الزمنية لإطارات الفيديو

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

function formatVideoTimestamp(totalSeconds, locale) {
  const hours = Math.floor(totalSeconds / 3600);
  const minutes = Math.floor((totalSeconds % 3600) / 60);
  const seconds = totalSeconds % 60;

  const duration = hours > 0
    ? { hours, minutes, seconds }
    : { minutes, seconds };

  return new Intl.DurationFormat(locale, {
    style: 'digital',
    fractionalDigits: 2
  }).format(duration);
}

formatVideoTimestamp(125.67, 'en');
// "2:05.67"

formatVideoTimestamp(3665.42, 'en');
// "1:01:05.42"

يُظهر هذا الطوابع الزمنية بدقة على مستوى الإطار لفيديو بمعدل 100 إطار في الثانية.

تحويل الميلي ثانية إلى ثوانٍ كسرية

غالبًا ما تنتج حسابات الوقت ميلي ثانية. حوّل الميلي ثانية إلى ثوانٍ كسرية بالقسمة على 1000.

const milliseconds = 1234;
const totalSeconds = milliseconds / 1000;

const duration = { seconds: totalSeconds };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 3
}).format(duration);
// "1.234 seconds"

يحوّل هذا الميلي ثانية الكاملة إلى قيمة ثوانٍ كسرية.

التعامل مع المدد الزمنية الصغيرة جدًا

بالنسبة للمدد الزمنية الأقل من ثانية واحدة، قم بتضمين وحدة الثواني فقط مع الأرقام الكسرية.

const duration = { seconds: 0.045 };

new Intl.DurationFormat('en', {
  style: 'short',
  fractionalDigits: 3
}).format(duration);
// "0.045 sec"

يشير الصفر قبل الفاصلة العشرية إلى مدة زمنية أقل من الثانية.

اختر الدقة المناسبة لحالة الاستخدام الخاصة بك

تتطلب التطبيقات المختلفة مستويات مختلفة من الدقة:

  • ساعات الإيقاف: منزلتان عشريتان (جزء من المئة من الثانية)
  • التوقيت الرياضي: 3 منازل عشرية (ميلي ثانية)
  • تحليل الأداء: 3 منازل عشرية (ميلي ثانية)
  • القياسات العلمية: 6-9 منازل عشرية (ميكرو ثانية إلى نانو ثانية)

طابق قيمة fractionalDigits مع متطلبات الدقة الخاصة بك.

const duration = { seconds: 1.23456789 };
const locale = navigator.language;

// For general timing
new Intl.DurationFormat(locale, {
  style: 'digital',
  fractionalDigits: 2
}).format(duration);
// "0:00:01.23"

// For precise measurements
new Intl.DurationFormat(locale, {
  style: 'short',
  fractionalDigits: 6
}).format(duration);
// "1.234568 sec"

تجنب إظهار دقة أكبر مما يوفره نظام القياس الخاص بك.

حذف الثواني الكسرية عند عدم الحاجة إليها

اضبط fractionalDigits: 0 لعرض الثواني الكاملة دون أي مكون كسري.

const duration = { seconds: 1.7 };

new Intl.DurationFormat('en', {
  style: 'long',
  fractionalDigits: 0
}).format(duration);
// "1 second"

يقوم هذا بتقريب القيمة وعرض الجزء الصحيح فقط.

إعادة استخدام المنسقات مع الثواني الكسرية

إنشاء المنسقات بإعدادات دقة محددة يتبع نفس تحسين الأداء الخاص بالمنسقات الأخرى.

const formatter = new Intl.DurationFormat('en', {
  style: 'digital',
  fractionalDigits: 3
});

const times = [
  { minutes: 1, seconds: 5.234 },
  { minutes: 2, seconds: 15.678 },
  { minutes: 0, seconds: 45.901 }
];

times.map(t => formatter.format(t));
// ["1:05.234", "2:15.678", "0:45.901"]

يعيد هذا استخدام نسخة المنسق لتحسين الأداء عند تنسيق مدد زمنية متعددة.

دعم المتصفحات

خيار fractionalDigits هو جزء من واجهة برمجة التطبيقات Intl.DurationFormat، والتي أصبحت أساسية في مارس 2025. يعمل في أحدث إصدارات Chrome وEdge وFirefox وSafari.

تحقق من الدعم قبل استخدام الثواني الكسرية.

if (typeof Intl.DurationFormat !== 'undefined') {
  const formatter = new Intl.DurationFormat('en', {
    style: 'digital',
    fractionalDigits: 3
  });
  return formatter.format(duration);
} else {
  return `${duration.minutes}:${duration.seconds.toFixed(3)}`;
}

يوفر هذا بديلاً للمتصفحات القديمة مع استخدام واجهة برمجة التطبيقات الأصلية عند توفرها.