تنسيق البرنامج المساعد لكائن مدة اللحظة.
يعد هذا مكونًا إضافيًا لمكتبة تاريخ Moment.js JavaScript لإضافة تنسيق شامل إلى Moment Durations.
يتم نقش القواعد النحوية لقالب التنسيق على القواعد النحوية لقالب تنسيق "تاريخ اللحظة" الحالي، مع بعض التعديلات لأن الفترات تختلف بشكل أساسي عن التواريخ.
لا يحتوي هذا المكون الإضافي على أي تبعيات تتجاوز Moment.js نفسها، ويمكن استخدامه في المتصفح وفي Node.js.
يستخدم هذا البرنامج الإضافي، عندما يكون متاحًا وعمليًا، إما Intl.NumberFormat#format
أو Number#toLocaleString
لتقديم مخرجات رقمية منسقة. لسوء الحظ، العديد من البيئات لا تنفذ بشكل كامل مجموعة الخيارات الكاملة في المواصفات الخاصة بها، وبعضها يوفر تطبيقًا به أخطاء.
يقوم هذا البرنامج الإضافي بتشغيل اختبار الميزات لكل منسق، وسيعود إلى وظيفة احتياطية لتقديم مخرجات رقمية منسقة في حالة فشل اختبار الميزات. لإجبار هذا المكون الإضافي على استخدام وظيفة تنسيق الأرقام الاحتياطية دائمًا، قم بتعيين useToLocaleString
على false
. يمكن ترجمة مخرجات وظيفة تنسيق الأرقام الاحتياطية باستخدام الخيارات المفصلة في أسفل هذه الصفحة. يجب عليك، بشكل عام، تحديد خيارات تنسيق الأرقام الاحتياطية إذا كان التنسيق المحلي الافتراضي "en"
غير مقبول على بعض الأجهزة أو في بعض البيئات.
تم اختبار هذا المكون الإضافي باستخدام BrowserStack على مجموعة من أجهزة Android التي تعمل بإصدارات نظام التشغيل من 2.2 إلى 7، وعلى مجموعة من أجهزة iOS التي تعمل بإصدارات نظام التشغيل من 4.3 إلى 11. كما تم اختباره أيضًا على متصفحات Chrome وFirefox وIE 8-11 وEdge. .
يرجى إثارة مشكلة إذا لاحظت مشاكل في التنسيق أو حالات شاذة في أي بيئة!
تبقى بعض العناصر لإنهاء الإصدار 2:
أضف تعريفات النوع لدعم TypeScript، ونشر حزمة NuGet، ودعم أي خيارات تعبئة أخرى مستخدمة هذه الأيام.
يجب تحديث اختبار البرنامج المساعد، بشكل مثالي ليتوافق مع إعداد اختبار Moment.js.
بعد تنفيذ الإصدار 2 من البرنامج الإضافي لتنسيق مدة اللحظة، هناك بعض التحسينات الواضحة للإصدار 3.
يتم تسجيل الأفكار الواردة أدناه كمشاكل ويتم وضع علامة عليها بالحدث الرئيسي 3.0.0. إذا كانت لديك أفكار أو تعليقات حول ما تود رؤيته، فيرجى تسجيل مشكلة في هذا المشروع!
يجب تضمين خيارات توطين تنسيق الأرقام الاحتياطية مع ملحقات كائنات Moment Locale التي يضيفها هذا البرنامج الإضافي بالفعل لتوطين تسميات وحدة المدة. وهذا من شأنه أن يضع كل تكوينات الترجمة في مكان واحد.
لا يتبع تنسيق moment-duration ووظيفة تنسيق الأرقام الاحتياطية نفس واجهة برمجة التطبيقات مثل Number#toLocaleString
للأرقام المهمة وأرقام الفصائل. يجب تحديث الوظيفة الاحتياطية لاستخدام toLocaleString
API، ويجب أن يعرض البرنامج الإضافي خيارات API مباشرةً بدلاً من إخفاء بعض الخيارات وإخفائها خلف خيارات precision
useSignificantDigits
.
إن الكشف عن وظيفة تنسيق الأرقام الاحتياطية بالإضافة إلى وظيفة اختبار ميزات المنسق من شأنه أن يسهل الاختبار ويسمح باستخدامها خارج سياق فترات التنسيق.
يعتمد المكون الإضافي على moment.js، والذي لم يتم تحديده كتبعية للحزمة في الإصدار المنشور حاليًا.
Node.js
npm install moment-duration-format
باور
bower install moment-duration-format
المتصفح
<script src="path/to/moment-duration-format.js"></script>
سيحاول هذا المكون الإضافي دائمًا تثبيت نفسه على نسخة root.moment
، إذا كان موجودًا.
سيقوم هذا المكون الإضافي بتثبيت وظيفة الإعداد الخاصة به على root.momentDurationFormatSetup
بحيث يمكن استدعاؤه لاحقًا في أي مثيل فوري.
عند استخدام هذا المكون الإضافي في المتصفح، إذا لم تقم بتضمين moment.js على صفحتك أولاً، فستحتاج إلى استدعاء window.momentDurationFormatSetup
يدويًا على مثيل اللحظة الخاص بك بمجرد إنشائه.
لاستخدام هذا البرنامج المساعد كوحدة نمطية، استخدم الدالة require
.
var moment = require ( "moment" ) ;
var momentDurationFormatSetup = require ( "moment-duration-format" ) ;
يقوم المكون الإضافي بتصدير وظيفة init بحيث يمكن تهيئة تنسيق المدة في مثيلات اللحظة الأخرى.
لاستخدام هذا البرنامج الإضافي مع أي حزمة moment.js أخرى، على سبيل المثال moment-timezone
، قم باستدعاء وظيفة الإعداد المصدرة يدويًا لتثبيت البرنامج الإضافي في الحزمة المطلوبة.
var moment = require ( "moment-timezone" ) ;
var momentDurationFormatSetup = require ( "moment-duration-format" ) ;
momentDurationFormatSetup ( moment ) ;
typeof moment . duration . fn . format === "function" ;
// true
typeof moment . duration . format === "function" ;
// true
moment . duration . fn . format
يمكن للأسلوب duration.fn.format
تنسيق أي مدة لحظية. إذا لم يتم توفير أي قالب أو وسائط أخرى، فستقوم وظيفة القالب الافتراضية بإنشاء سلسلة قالب بناءً على قيمة المدة.
moment . duration ( 123 , "minutes" ) . format ( ) ;
// "2:03:00"
moment . duration ( 123 , "months" ) . format ( ) ;
// "10 years, 3 months"
يمكن استدعاء أسلوب تنسيق المدة باستخدام ثلاث وسائط اختيارية، وإرجاع سلسلة منسقة.
moment . duration ( value , units ) . format ( [ template ] [ , precision ] [ , settings ] )
// formattedString
moment . duration . format
يسمح الأسلوب duration.format
بالتنسيق المنسق لفترات زمنية متعددة في وقت واحد. تقبل هذه الدالة مصفوفة من المدد كوسيطة أولى لها، ثم نفس الوسائط الاختيارية الثلاث مثل الدالة duration.fn.format
. تقوم هذه الدالة بإرجاع مجموعة من السلاسل المنسقة.
moment . duration . format ( durationsArray , [ template ] [ , precision ] [ , settings ] ) ;
// formattedStringsArray
يمكن استخدام كافة الخيارات المتوفرة لوظيفة تنسيق المدة الفردية مع وظيفة تنسيق المدة المتعددة. يتم استخدام كائن إعدادات واحد لتنسيق كل مدة من الفترات الفردية.
moment . duration . format ( [
moment . duration ( 1 , "second" ) ,
moment . duration ( 1 , "minute" ) ,
moment . duration ( 1 , "hour" )
] , "d [days] hh:mm:ss" ) ;
// ["0:00:01", "0:01:00", "1:00:00"]
يتم التعامل مع المدد غير الصالحة على أنها تحتوي على قيمة 0
للتنسيق.
var invalidDuration = moment . duration ( NaN , "second" ) ;
invalidDuration . isValid ( ) ;
// false
invalidDuration . format ( ) ;
// "0 seconds"
template
(سلسلة|وظيفة) هو السلسلة المستخدمة لإنشاء الإخراج المنسق، أو دالة ترجع السلسلة المراد استخدامها كقالب التنسيق.
moment . duration ( 123 , "minutes" ) . format ( "h:mm" ) ;
// "2:03"
يتم تحليل سلسلة القالب لأحرف الرمز المميز للحظة، والتي يتم استبدالها بقيمة المدة لكل نوع وحدة. رموز اللحظة هي:
years: Y or y
months: M
weeks: W or w
days: D or d
hours: H or h
minutes: m
seconds: s
ms: S
قم بإلغاء الأحرف المميزة داخل سلسلة القالب باستخدام الأقواس المربعة.
moment . duration ( 123 , "minutes" ) . format ( "h [hrs], m [min]" ) ;
// "2 hrs, 3 mins"
بالنسبة لبعض تنسيقات المدة الزمنية، تكون القيمة المبطنة صفر مطلوبة. استخدم عدة أحرف رمزية معًا لإنشاء المقدار الصحيح من المساحة المتروكة.
moment . duration ( 3661 , "seconds" ) . format ( "h:mm:ss" ) ;
// "1:01:01"
moment . duration ( 15 , "seconds" ) . format ( "sss [s]" ) ;
// "015 s"
عندما يتم اقتطاع قالب التنسيق، يمكن أيضًا اقتطاع طول الرمز المميز الموجود على أكبر حجم للرمز المميز المعروض. راجع أقسام القطع و forceLength أدناه لمزيد من التفاصيل.
moment . duration ( 123 , "seconds" ) . format ( "h:mm:ss" ) ;
// "2:03"
طول الرمز المميز الذي يبلغ 2
ميلي ثانية هو حالة خاصة، يستخدم على الأرجح لعرض ميلي ثانية كجزء من مخرجات المؤقت، مثل mm:ss:SS
. في هذه الحالة، يتم تعبئة قيمة المللي ثانية إلى ثلاثة أرقام ثم يتم اقتطاعها من اليسار لتقديم مخرجات مكونة من رقمين.
moment . duration ( 9 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:00:00"
moment . duration ( 10 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:00:01"
moment . duration ( 999 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:00:99"
moment . duration ( 1011 , "milliseconds" ) . format ( "mm:ss:SS" , {
trim : false
} ) ;
// "00:01:01"
يمكن أن تظهر الرموز المميزة عدة مرات في قالب التنسيق، ولكن يجب أن تشترك كافة المثيلات في نفس الطول. إذا لم يحدث ذلك، فسيتم عرض كافة المثيلات بطول الرمز المميز الأول من هذا النوع.
moment . duration ( 15 , "seconds" ) . format ( "ssss sss ss s" ) ;
// "0015 0015 0015 0015"
moment . duration ( 15 , "seconds" ) . format ( "s ss sss ssss" ) ;
// "15 15 15 15"
تحاول وظيفة القالب الافتراضية تنسيق المدة بناءً على حجمها. كلما زادت قيمة المدة، زادت وحدات الإخراج المنسق.
بالنسبة لبعض قيم المدة، سيتم trim
وظيفة القالب الافتراضية افتراضيًا إلى "both"
إذا لم يتم تعيين هذا الخيار في كائن الإعدادات (المزيد حول ذلك أدناه).
تستخدم وظيفة القالب الافتراضية تسميات الوحدات المترجمة تلقائيًا (المزيد حول ذلك أدناه أيضًا).
moment . duration ( 100 , "milliseconds" ) . format ( ) ;
// "100 milliseconds"
moment . duration ( 100 , "seconds" ) . format ( ) ;
// "1:40"
moment . duration ( 100 , "days" ) . format ( ) ;
// "3 months, 9 days"
moment . duration ( 100 , "weeks" ) . format ( ) ;
// "1 year, 10 months, 30 days"
moment . duration ( 100 , "months" ) . format ( ) ;
// "8 years, 4 months"
استخدم وظيفة قالب مخصص إذا كنت بحاجة إلى التحكم في وقت التشغيل في سلسلة القالب. يتم تنفيذ وظائف القالب باستخدام this
الربط لكائن الإعدادات، ويمكنها الوصول إلى كائن المدة الأساسي عبر this.duration
. يمكن الوصول إلى أي من الإعدادات أو تعديلها بواسطة وظيفة القالب.
تستخدم وظيفة القالب المخصص هذه قالبًا مختلفًا بناءً على قيمة المدة:
function customTemplate ( ) {
return this . duration . asSeconds ( ) >= 86400 ? "w [weeks], d [days]" : "hh:mm:ss" ;
}
moment . duration ( 65 , 'seconds' ) . format ( customTemplate , {
trim : false
} ) ;
// "00:01:05"
moment . duration ( 1347840 , 'seconds' ) . format ( customTemplate , {
trim : false
} ) ;
// "2 weeks, 2 days"
لضمان إخراج منسق سهل الاستخدام، يتم اقتطاع أحرف الترقيم من بداية ونهاية الإخراج المنسق. على وجه التحديد، الفترة البادئة والزائدة .
، الفاصلة ,
النقطتان :
، والفضاء
تتم إزالة الأحرف.
تحدد precision
(الرقم) عدد الكسر العشري أو الأرقام الصحيحة التي سيتم عرضها للقيمة النهائية.
قيمة الدقة الافتراضية هي 0
.
moment . duration ( 123 , "minutes" ) . format ( "h [hrs]" ) ;
// "2 hrs"
تحدد الدقة الموجبة عدد أرقام الكسور العشرية التي سيتم عرضها.
moment . duration ( 123 , "minutes" ) . format ( "h [hrs]" , 2 ) ;
// "2.05 hrs"
تحدد الدقة السالبة عدد الأرقام الصحيحة التي سيتم اقتطاعها إلى الصفر.
moment . duration ( 223 , "minutes" ) . format ( "m [min]" , - 2 ) ;
// "200 mins"
settings
هي كائن يمكنه تجاوز أي من خيارات تنسيق مدة اللحظة الافتراضية.
يمكن تحديد كل من وسيطتي template
precision
كخصائص لوسيطة كائن settings
واحدة، أو قد يتم تمريرهما بشكل منفصل مع كائن إعدادات اختيارية.
moment . duration ( 123 , "minutes" ) . format ( {
template : "h [hrs]" ,
precision : 2
} ) ;
// "2.05 hrs"
سلوك trim
الافتراضي هو "large"
.
يتم قطع الرموز المميزة ذات الحجم الأكبر تلقائيًا عندما لا تكون لها قيمة.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" ) ;
// "2:03:00"
يعمل الاقتطاع أيضًا عندما يتم توجيه سلسلة التنسيق مع زيادة حجم الرمز المميز من اليسار إلى اليمين.
moment . duration ( 123 , "minutes" ) . format ( "s [seconds], m [minutes], h [hours], d [days]" ) ;
// "0 seconds, 3 minutes, 2 hours"
لإيقاف التشذيب تمامًا، اضبط { trim: false }
.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : false
} ) ;
// "0d 2:03:00"
عند تنسيق فترات متعددة باستخدام moment.duration.format
، يتم تنسيق التشذيب لجميع الفترات عند اتحاد مجموعة الفترات.
moment . duration . format ( [
moment . duration ( 1 , "minute" ) ,
moment . duration ( 1 , "hour" ) ,
moment . duration ( 1 , "day" )
] , "y [years], w [weeks], d [days], h [hours], m [minutes]" ) ;
// [
// "0 days, 0 hours, 1 minute",
// "0 days, 1 hour, 0 minutes",
// "1 day, 0 hours, 0 minutes"
// ]
يمكن أن يكون trim
عبارة عن سلسلة، أو قائمة محددة من السلاسل، أو مصفوفة من السلاسل، أو قيمة منطقية. القيم المقبولة هي كما يلي:
"large"
قم بقص الرموز المميزة ذات القيمة الصفرية ذات الحجم الأكبر حتى العثور على رمز مميز ذو قيمة، أو رمز مميز محدد كـ stopTrim
، أو الرمز المميز الأخير لسلسلة التنسيق. هذه هي قيمة trim
الافتراضية.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" ) ;
// "2:03:00"
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "large"
} ) ;
// "2:03:00"
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "large"
} ) ;
// "0"
"small"
قم بقص الرموز المميزة ذات القيمة الصفرية ذات الحجم الأصغر حتى العثور على رمز مميز ذو قيمة، أو رمز مميز محدد كـ stopTrim
، أو الرمز المميز الأخير لسلسلة التنسيق.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "small"
} ) ;
// "0d 2:03"
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "small"
} ) ;
// "0d"
"both"
قم بتنفيذ عملية القطع "large"
ثم عملية القطع "small"
.
moment . duration ( 123 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "both"
} ) ;
// "2h 3m"
moment . duration ( 0 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "both"
} ) ;
// "0s"
"mid"
قم بقص أي رموز مميزة ذات قيمة صفرية ليست الرموز المميزة الأولى أو الأخيرة. يُستخدم عادةً مع "large"
أو "both"
. على سبيل المثال "large mid"
أو "both mid"
.
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "mid"
} ) ;
// "0w 1d 1m 0s"
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "large mid"
} ) ;
// "1d 1m 0s"
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "small mid"
} ) ;
// "0w 1d 1m"
moment . duration ( 1441 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "both mid"
} ) ;
// "1d 1m"
moment . duration ( 0 , "minutes" ) . format ( "w[w] d[d] h[h] m[m] s[s]" , {
trim : "both mid"
} ) ;
// "0s"
"final"
قم بقص الرمز المميز النهائي إذا كانت قيمته صفرًا. استخدم هذا الخيار مع "large"
أو "both"
لإخراج سلسلة فارغة عند تنسيق مدة ذات قيمة صفرية. على سبيل المثال "large final"
أو "both final"
.
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "large final"
} ) ;
// ""
moment . duration ( 0 , "minutes" ) . format ( "d[d] h:mm:ss" , {
trim : "small final"
} ) ;
// ""
moment . duration ( 0 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "both final"
} ) ;
// ""
"all"
قم بقص جميع الرموز ذات القيمة الصفرية. اختصار لعبارة "both mid final"
.
moment . duration ( 0 , "minutes" ) . format ( "d[d] h[h] m[m] s[s]" , {
trim : "all"
} ) ;
// ""
"left"
تعيينات إلى "large"
لدعم الإصدار 1 من واجهة برمجة التطبيقات لهذا البرنامج المساعد.
"right"
تعيينات إلى "large"
لدعم الإصدار 1 من واجهة برمجة التطبيقات لهذا البرنامج المساعد.
true
خرائط إلى "large"
.
null
خرائط إلى "large"
.
false
تعطيل التشذيب.
قم بتعيين largest
على عدد صحيح موجب لإخراج الرموز المميزة ذات الحجم n
فقط، بدءًا من الرمز المميز ذو الحجم الأكبر الذي له قيمة.
باستخدام الخيار largest
، trim
الإعدادات الافتراضية إلى "all"
.
moment . duration ( 7322 , "seconds" ) . format ( "d [days], h [hours], m [minutes], s [seconds]" , {
largest : 2
} ) ;
// "2 hours, 2 minutes"
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 3
} ) ;
// "2 weeks, 2 hours"
يمكن أن يؤدي تعيين trim
إلى قيمة مختلفة، أو استخدام stopTrim
إلى تغيير رمز البداية بالإضافة إلى الإخراج المتبقي.
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 3 ,
trim : "both"
} ) ;
// "2 weeks, 0 days, 2 hours"
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 3 ,
trim : "both" ,
stopTrim : "m"
} ) ;
// "2 weeks, 0 days, 2 hours"
moment . duration ( 1216800 , "seconds" ) . format ( "y [years], w [weeks], d [days], h [hours], m [minutes], s [seconds]" , {
largest : 4 ,
trim : false