لقد انحرفت هذه الحزمة من مواصفات Intl.RelativeTimeFormat بشكل كبير. لذلك ، قمنا بإهمال هذه الحزمة وأضفنا `@formatjs/intl-relativeTimeFormat باعتباره polyfill المتوافق مع المواصفات.
units (مثل day-short ) بشكل مشابه إلى: new IntlRelativeFormat ( 'en' , { units : 'second-short' } ) . format (
Date . now ( ) - 1000
) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'short' } ) . format ( - 1 , 'second' ) ;
new IntlRelativeFormat ( 'en' , { units : 'day-narrow' } ) . format (
Date . now ( ) - 48 * 3600 * 1000
) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'narrow' } ) . format ( - 2 , 'day' ) ;style: numeric numeric: always لكل مواصفات (وهو أيضًا الافتراضي) new IntlRelativeFormat ( 'en' , {
units : 'second-short' ,
style : 'numeric'
} ) . format ( Date . now ( ) - 1000 ) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'short' } ) . format ( - 1 , 'second' ) ; new IntlRelativeFormat ( 'en' , { units : 'day-narrow' , style : 'numeric' } ) . format (
Date . now ( ) - 48 * 3600 * 1000
) ;
// will be
new Intl . RelativeTimeFormat ( 'en' , { style : 'narrow' } ) . format ( - 2 , 'day' ) ;style: 'best fit' أكثر صعوبة بعض الشيء ، لكننا أصدرنا @formatjs/intl-utils لتخفيف الانتقال: new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format ( Date . now ( ) - 1000 ) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ; new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format (
Date . now ( ) - 48 * 3600 * 1000
) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 48 * 3600 * 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ;formatjs/intl-utils كنت format options.now new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format ( Date . now ( ) - 1000 , {
now : Date . now ( ) + 1000
} ) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 1000 , Date . now ( ) + 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ; new IntlRelativeFormat ( 'en' , { style : 'best fit' } ) . format (
Date . now ( ) - 48 * 3600 * 1000 ,
{ now : Date . now ( ) + 1000 }
) ;
// will be
import { selectUnit } from '@formatjs/intl-utils' ;
const diff = selectUnit ( Date . now ( ) - 48 * 3600 * 1000 , Date . now ( ) + 1000 ) ;
new Intl . RelativeTimeFormat ( 'en' , { numeric : 'auto' } ) . format (
diff . value ,
diff . unit
) ;تنسيقات JavaScript يعود إلى سلاسل الوقت النسبية (على سبيل المثال ، "3 ساعات").
تهدف هذه الحزمة إلى توفير وسيلة لتنسيق اختلافات مختلفة من الوقت النسبي. يمكنك استخدام هذه الحزمة في المتصفح وعلى الخادم عبر Node.js.
يشبه هذا التنفيذ إلى حد كبير Moment.js ، من خلال المفهوم ، على الرغم من أنه يوفر فقط ميزات التنسيق بناءً على بيانات موقع Unicode CLDR ، وهو معيار في الصناعة يدعم أكثر من 200 لغة.
var rf = new IntlRelativeFormat ( locales , [ options ] ) ; يمكن أن تكون locales إما علامة لغة واحدة ، على سبيل المثال ، "en-US" أو مجموعة منها سيتم استخدام المباراة الأولى منها. توفر options وسيلة للتحكم في إخراج سلسلة الوقت النسبية المنسقة.
var output = rf . format ( someDate , [ options ] ) ; الطريقة الأكثر شيوعًا لاستخدام هذه المكتبة هي إنشاء مثيل IntlRelativeFormat وإعادة استخدامه عدة مرات لتنسيق قيم التاريخ المختلفة ؛ على سبيل المثال:
var rf = new IntlRelativeFormat ( 'en-US' ) ;
var posts = [
{
id : 1 ,
title : 'Some Blog Post' ,
date : new Date ( 1426271670524 )
} ,
{
id : 2 ,
title : 'Another Blog Post' ,
date : new Date ( 1426278870524 )
}
] ;
posts . forEach ( function ( post ) {
console . log ( rf . format ( post . date ) ) ;
} ) ;
// => "3 hours ago"
// => "1 hour ago" خيارات النمط لـ "best fit" ("بالأمس") و "numeric" ("منذ يوم واحد") على أساس العتبات.
خيارات الوحدات لتقديم دائمًا في وحدة معينة ؛ على سبيل المثال "منذ 30 يومًا" ، بدلاً من "شهر واحد منذ شهر".
القدرة على تحديد قيمة "الآن" التي يتم حساب الوقت النسبي ، مما يسمح format() .
تنسيق الإخراج في سلاسل الوقت النسبية باستخدام `intl.relativetimeformat
تم تحسينه للمكالمات المتكررة إلى طريقة format() مثيل IntlRelativeFormat .
Intl تفترض هذه الحزمة القدرات التالية من Intl :
Intl.PluralRulesIntl.RelativeTimeFormatإذا كانت بيئتك لا تدعمها ، فلا تتردد في الاستيلاء على ملفيات:
قم بتثبيت الحزمة و polyfill:
npm install intl-relativeformat --save ببساطة require() هذه الحزمة:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ;
var rf = new IntlRelativeFormat ( 'en' ) ;
var output = rf . format ( dateValue ) ;حزمة تثبيت:
npm install intl-relativeformat --save ببساطة require() هذه الحزمة واللغات المحددة التي ترغب في دعمها في الحزمة:
var IntlRelativeFormat = require ( 'intl-relativeformat' ) ; ملاحظة: في Node.js ، يتم تحميل البيانات الخاصة بجميع اللغات البالغ عددها 200 لغة إلى جانب المكتبة ، ولكن عند تجميعها باستخدام Prowserify/Webpack ، يتم تجاهل البيانات عمداً (انظر package.json لمزيد من التفاصيل) لتجنب تفجير حجم الحزمة مع البيانات التي قد لا تحتاج إليها.
IntlRelativeFormat لتنسيق تاريخ للوقت النسبي ، استخدم مُنشئ IntlRelativeFormat . يأخذ المنشئ معلمتين:
لغات - {String | String []} - سلسلة مع علامة لغة BCP 47 ، أو مجموعة من هذه الأوتار. إذا لم تقدم لغة ، فسيتم استخدام اللغة الافتراضية. عند توفير مجموعة من الأماكن ، يتم التحقق من كل عنصر ولغات أجداده ويتم إرجاع أول عنصر في البيانات المحلية المسجلة. انظر: قرار اللغة لمزيد من التفاصيل.
[Options] - {Object} - كائن اختياري مع خيارات محددة للمستخدم لأنماط التنسيق. انظر: خيارات مخصصة لمزيد من التفاصيل.
ملاحظة: يجب أن يكون مثيل rf كافياً لتطبيقك بالكامل ، إلا إذا كنت ترغب في استخدام خيارات مخصصة.
يستخدم IntlRelativeFormat عملية دقة موضعية مماثلة لتلك الخاصة بآبار واجهات برمجة التطبيقات Intl المدمجة لتحديد البيانات المحلية التي يجب استخدامها بناءً على قيمة locales التي تم تمريرها إلى المُنشئ. يمكن تحديد نتيجة عملية الدقة هذه عن طريق استدعاء طريقة النموذج الأولي resolvedOptions() .
فيما يلي الخطوات المجردة التي تمر بها IntlRelativeFormat لحل القيمة المحلية:
إذا لم يتم تحميل أي بيانات محلية إضافية ، فسيتم حل اللغة دائمًا إلى "en" .
إذا كانت البيانات المحلية مفقودة في لغة الأوراق مثل "fr-FR" ، ولكن هناك بيانات لأحد أسلافها ، "fr" في هذه الحالة ، فسيتم استخدام أسلافها.
إذا كانت هناك بيانات للمنطقة المحددة ، فسيتم حل هذه اللغة ؛ أي،
var rf = new IntlRelativeFormat ( 'en-US' ) ;
assert ( rf . resolvedOptions ( ) . locale === 'en-US' ) ; // true يتم الآن تطبيع اللغات التي تم حلها ؛ على سبيل المثال ، "en-us" ستحل إلى: "en-US" .
ملاحظة: عند توفير صفيف locales ، تحدث الخطوات المذكورة أعلاه لكل عنصر في تلك الصفيف حتى يتم العثور على المباراة.
توفر options الوسيطة الثانية الاختيارية طريقة لتخصيص كيفية تنسيق الوقت النسبي.
بشكل افتراضي ، يتم حساب الوقت النسبي على أفضل وحدة ملائمة ، ولكن يمكنك أن تسميها بشكل صريح لإجبار units على عرضها في "second" ، "second-short" ، "Second "minute-short" "second-narrow" "minute" "hour-short" ، " "minute-narrow" "day" "hour" "day-short" "day-narrow" ، "month" ، "month-short" "hour-narrow" "month-narrow" ، "year" ، "year-short" أو "year-narrow" :
var rf = new IntlRelativeFormat ( 'en' , {
units : 'day'
} ) ;
var output = rf . format ( dateValue ) ;نتيجة لذلك ، سيكون الإخراج "قبل 70 يومًا" بدلاً من "قبل شهرين".
بشكل افتراضي ، يتم حساب الوقت النسبي على أنه "best fit" ، مما يعني أنه بدلاً من "يوم واحد منذ يوم" ، سيتم عرضه "بالأمس" ، أو "في عام واحد" سيكون "العام المقبل" ، وما إلى ذلك ، ولكن يمكنك فرض دائمًا استخدام البديل "الرقمي":
var rf = new IntlRelativeFormat ( 'en' , {
style : 'numeric'
} ) ;
var output = rf . format ( dateValue ) ;نتيجة لذلك ، سيكون الإخراج "قبل يوم واحد" بدلاً من "أمس".
resolvedOptions() طريقة تقوم هذه الطريقة بإرجاع كائن بقيم الخيارات التي تم حلها أثناء إنشاء المثيل. أنه يحتوي حاليًا فقط على خاصية locale ؛ هذا مثال:
var rf = new IntlRelativeFormat ( 'en-us' ) ;
console . log ( rf . resolvedOptions ( ) . locale ) ; // => "en-US" لاحظ كيف كانت اللغة المحددة هي القيمة السفلية: "en-us" ، ولكن تم حلها وتطبيعها إلى: "en-US" .
format(date, [options]) طريقة التنسيق ( التي تأخذ تاريخ JavaScript أو الطابع الزمني ) وسيقارن وسيطات options الاختيارية date مع "الآن" (أو options.now ) ، وإرجاع السلسلة المنسقة ؛ على سبيل المثال ، "منذ 3 ساعات" في اللغة المقابلة التي تم تمريرها إلى المُنشئ.
var output = rf . format ( new Date ( ) ) ;
console . log ( output ) ; // => "now" إذا كنت ترغب في تحديد قيمة "الآن" ، فيمكن توفيرها عبر options.now الآن وسيتم استخدامها بدلاً من الاستعلام عن Date.now() للحصول على القيمة الحالية "الآن".
هذا البرنامج مجاني لاستخدامه تحت Yahoo! شركة BSD ترخيص. راجع ملف الترخيص للحصول على نص الترخيص ومعلومات حقوق الطبع والنشر.