Moment Duration オブジェクトのフォーマット プラグイン。
これは、Moment 期間に包括的な書式設定を追加する Moment.js JavaScript 日付ライブラリへのプラグインです。
フォーマット テンプレートの文法は、既存の Moment Date フォーマット テンプレートの文法に基づいてパターン化されていますが、期間は日付とは根本的に異なるため、いくつかの変更が加えられています。
このプラグインには Moment.js 自体以外の依存関係はなく、ブラウザーと Node.js で使用できます。
利用可能で機能する場合、このプラグインはIntl.NumberFormat#format
またはNumber#toLocaleString
を使用して、書式設定された数値出力をレンダリングします。残念ながら、多くの環境ではそれぞれの仕様でオプションの完全なスイートが完全に実装されておらず、一部の環境ではバグのある実装が提供されています。
このプラグインは各フォーマッタの機能テストを実行し、機能テストが失敗した場合はフォールバック関数に戻り、フォーマットされた数値出力をレンダリングします。このプラグインにフォールバック数値形式関数を常に使用させるには、 useToLocaleString
false
に設定します。フォールバック数値形式関数の出力は、このページの下部で説明されているオプションを使用してローカライズできます。一般に、デフォルトの"en"
ロケール書式設定が一部のデバイスまたは環境で受け入れられない場合は、フォールバック数値書式設定オプションを指定する必要があります。
このプラグインは、OS バージョン 2.2 ~ 7 のさまざまな Android デバイスと、OS バージョン 4.3 ~ 11 のさまざまな iOS デバイスで BrowserStack を使用してテストされています。また、Chrome、Firefox、IE 8 ~ 11、および Edge ブラウザでもテストされています。 。
どの環境でもフォーマットの問題や異常に気づいた場合は、問題を報告してください。
バージョン 2 を完成させるために、いくつかの項目が残っています。
TypeScript をサポートする型定義を追加し、NuGet パッケージを公開し、最近使用されている他のパッケージ化オプションをサポートします。
プラグインのテストは、理想的には Moment.js のテスト設定と一致するように最新化する必要があります。
moment-duration-format プラグインのバージョン 2 を実装したので、バージョン 3 では明らかな改善がいくつかあります。
以下のアイデアは問題として記録され、3.0.0 マイルストーンのタグが付けられています。見てみたいものについてアイデアやコメントがある場合は、このプロジェクトに問題を記録してください。
フォールバック数値書式設定ローカリゼーション オプションは、このプラグインが期間単位ラベルのローカライズ用にすでに追加している Moment Locale オブジェクト拡張機能に含める必要があります。これにより、すべてのローカリゼーション設定が 1 か所にまとめられます。
moment-duration-format とそのフォールバック数値書式設定関数は、有効桁および派閥桁についてNumber#toLocaleString
と同じ API に従いません。フォールバック関数は、 toLocaleString
API を使用するように更新する必要があります。また、プラグインは、一部のオプションを非表示にしてprecision
やuseSignificantDigits
オプションの背後にマスクするのではなく、API オプションを直接公開する必要があります。
フォールバック数値フォーマット関数とフォーマッタ機能テスト関数を公開すると、テストが容易になり、フォーマット期間のコンテキスト外でそれらを使用できるようになります。
このプラグインは 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"
期間フォーマット メソッドは 3 つのオプションの引数を指定して呼び出すことができ、フォーマットされた文字列を返します。
moment . duration ( value , units ) . format ( [ template ] [ , precision ] [ , settings ] )
// formattedString
moment . duration . format
duration.format
メソッドを使用すると、複数の瞬間の継続時間を一度に調整してフォーマットできます。この関数は、最初の引数として期間の配列を受け入れ、次に、 duration.fn.format
関数と同じ 3 つのオプションの引数を受け入れます。この関数は、フォーマットされた文字列の配列を返します。
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
(string|function) は、書式設定された出力の作成に使用される文字列、または書式テンプレートとして使用される文字列を返す関数です。
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"
フォーマット テンプレートをトリミングすると、最大の大きさでレンダリングされたトークンのトークンの長さも同様にトリミングできます。詳細については、以下の「trim」および「forceLength」セクションを参照してください。
moment . duration ( 123 , "seconds" ) . format ( "h:mm:ss" ) ;
// "2:03"
ミリ秒のトークン長2
は特殊なケースで、 mm:ss:SS
などのタイマー出力の一部としてミリ秒をレンダリングするために使用される可能性が最も高くなります。この場合、ミリ秒の値は 3 桁に埋め込まれ、左から切り捨てられて 2 桁の出力が表示されます。
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"
デフォルトのテンプレート関数は、期間の大きさに基づいて期間をフォーマットしようとします。期間の値が大きいほど、フォーマットされた出力の単位も大きくなります。
一部の期間値については、そのオプションが設定オブジェクトで設定されていない場合、デフォルトのテンプレート関数はデフォルトで"both"
にtrim
します (詳細は以下を参照)。
デフォルトのテンプレート関数は、自動ローカライズされたユニット ラベルを使用します (これについては以下で詳しく説明します)。
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"
このプラグインのバージョン 1 API をサポートするには"large"
にマップします。
"right"
このプラグインのバージョン 1 API をサポートするには"large"
にマップします。
true
"large"
にマップされます。
null
"large"
にマップされます。
false
トリミングを無効にします。
値を持つ最大振幅トークンから始めて、 n
の最大振幅モーメント トークンのみを出力するには、 largest
を正の整数に設定します。
largest
オプションを使用すると、デフォルトで"all"
にtrim
。
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