私はプロジェクトでMoment.jsを使用し、次のように日付をフォーマットしています。
_var locale = window.navigator.userLanguage || window.navigator.language;
moment.locale(locale);
someDate.format("L");
_
それはうまくいきますが、年のない日付を表示する必要がある場合があります。一部の言語ではsomeDate.format("MM/DD")
である必要があるため、someDate.format("DD/MM")
のようなものは使用できません。 _L,LL,LLL
_のようなものが必要ですが、年はありません。
私に何ができる?
_LTS : 'h:mm:ss A',
LT : 'h:mm A',
L : 'MM/DD/YYYY',
LL : 'MMMM D, YYYY',
LLL : 'MMMM D, YYYY LT',
LLLL : 'dddd, MMMM D, YYYY LT'
_
はい。これは少しひどいですが、そうなることは知っていました。
まず、(たとえば)'L'
の実際のフォーマット文字列にアクセスできます。
var formatL = moment.localeData().longDateFormat('L');
次に、適切な正規表現の置換を使用して、手術を行うことができます。
var formatYearlessL = formatL.replace(/Y/g,'').replace(/^\W|\W$|\W\W/,'');
(つまり、YYYYを削除し、その削除によって残された孤立した区切り文字を削除します)
その後、瞬間形式呼び出しで新しい形式文字列を使用できます。
someDate.format(formatYearlessL);
これは必然的にいくつかの仮定を行います:
locale/*.js
の簡単なレビューでは、これらの仮定は私が調べたすべてのロケールファイルに当てはまりますが、それらに違反するロケールが存在する場合があります。 (ETA:以下のコメントは、ドイツの短い日付形式が2番目の仮定に違反していることを指摘しています)
追加の重要な警告として、これは壊れやすい可能性があります。 moment.jsの将来のバージョンが、現在longDateFormat
...にあるデータの場所を変更する可能性は完全にあります。
私の知る限り、MomentJSプロパティを使用して特定の言語の日付形式(年なし)を変更できます https://momentjs.com/docs/#/customization/long-date-formats/
例:
moment.updateLocale('en', {
longDateFormat: {
LLL: "MMMM Do, LT", // Oct 6th, 4:27 PM
}
});
moment.updateLocale('ru', {
longDateFormat: {
LLL : 'D MMMM, HH:mm', // 6 окт., 16:27
}
});
ライブラリは、上書きできない正規表現(var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
)に対して検証されるため、新しい形式を簡単に追加できません。
ただし、新しい形式をMomentが認識するトークンに変換するために、format関数をオーバーライドできます。
たとえば、「LMD」という新しいカスタム形式を追加しましょう。最初に、使用するすべてのロケールに対して定義する必要があります。
moment.updateLocale('en', {
longDateFormat: {
LMD: 'MMMM D'
}
});
moment.updateLocale('fr', {
longDateFormat: {
LMD: 'D MMMM'
}
});
次に、元のフォーマット関数をオーバーライドし、inputString
( "LMD")を以前に定義した実際のトークンに変換します。その後、元の関数を呼び出して、Momentに通常どおりジョブを実行させます。
var originalMomentFormat = moment.prototype.format;
moment.prototype.format = function (inputString) {
if (inputString === 'LMD') { // check for your custom types here. maybe use constants or whatever
inputString = moment.localeData().longDateFormat(inputString);
}
return originalMomentFormat.apply(this, [inputString]);
};
使用例:
moment(someDate).format('LMD');