2017-06-01 15 views
2

moment.jsに現在の日と月を(年なしで)ローカライズするにはどうすればよいですか?私が望むのは正確にはmoment().format('LL')の出力ですが、年の部分はありません。moment.jsの日と月をローカライズ

は、次の例を考えてみましょう:私が欲しいもの

moment().locale('tr').format('LL') // "1 Haziran 2017" 
moment().locale('en').format('LL') // "June 1, 2017" 

はこれらです:

moment().locale('tr').format('??') // "1 Haziran" 
moment().locale('en').format('??') // "June 1" 

答えて

3

サポートされているすべてのロケールのエラーが発生しやすいソリューションについて、あなたは.replaceで年を削除し、左の不要なシンボルをチェックする必要があります。

function getCurrDayAndMonth(locale) { 
 
    var today = locale.format('LL'); 
 
    return today 
 
    .replace(locale.format('YYYY'), '') // remove year 
 
    .replace(/\s\s+/g, ' ')// remove double spaces, if any 
 
    .trim() // remove spaces from the start and the end 
 
    .replace(/[рг]\./, '') // remove year letter from RU/UK locales 
 
    .replace(/de$/, '') // remove year prefix from PT 
 
    .replace(/b\.$/, '') // remove year prefix from SE 
 
    .trim() // remove spaces from the start and the end 
 
    .replace(/,$/g, ''); // remove comma from the end 
 
} 
 

 
['af' , 'ar-dz', 'ar-kw', 'ar-ly', 'ar-ma', 'ar-sa', 'ar-tn', 'ar', 'az', 'be', 'bg', 'bn', 'bo', 'br', 'bs', 'ca', 'cs', 'cv', 'cy', 'da', 'de-at', 'de-ch', 'de', 'dv', 'el', 'en-au', 'en-ca', 'en-gb', 'en-ie', 'en-nz', 'eo', 'es-do', 'es', 'et', 'eu', 'fa', 'fi', 'fo', 'fr-ca', 'fr-ch', 'fr', 'fy', 'gd', 'gl', 'gom-latn', 'he', 'hi', 'hr', 'hu', 'hy-am', 'id', 'is', 'it', 'ja', 'jv', 'ka', 'kk', 'km', 'kn', 'ko', 'ky', 'lb', 'lo', 'lt', 'lv', 'me', 'mi', 'mk', 'ml', 'mr', 'ms-my', 'ms', 'my', 'nb', 'ne', 'nl-be', 'nl', 'nn', 'pa-in', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sd', 'se', 'si', 'sk', 'sl', 'sq', 'sr-cyrl', 'sr', 'ss', 'sv', 'sw', 'ta', 'te', 'tet', 'th', 'tl-ph', 'tlh', 'tr', 'tzl', 'tzm-latn', 'tzm', 'uk', 'ur', 'uz-latn', 'uz', 'vi', 'x-pseudo', 'yo', 'zh-cn', 'zh-hk', 'zh-tw'].forEach(localeName => { 
 
    console.log(
 
    localeName + ':', 
 
    getCurrDayAndMonth(moment().locale(localeName))); 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>

+0

私はこれが私ができる最高だと思う。ありがとう – smddzcy

+1

良い答え!それが "受け入れられた"重複した質問への答えに触発されたならば、upvotingを検討してください。 – VincenzoC

+0

Upvoted、しかし重複したリンクの前に現われました:) – terales

0

は、あなただけの文字列表現をしたいですか?もしそうなら、そうのように、単に出力の端から最後の5つの文字をトリミングする方が簡単かもしれません:

var today = moment().locale('tr').format('LL') // "1 Haziran 2017" 
today = today.substring(0, today.length - 5); // "1 Haziran" 

これは、次の8000年のための将来を心配するので、本当の必要は動作しませうそれを壊す。

さらにスマートな正規表現マッチングを行うことも、文字列から "、20XX"ですべてを削除することもできます。あなたの用途にもよりますが、これは直接的な解決策よりも厄介な回避策です。ここで

+0

これは明白な解決策ですが、 'format( 'LL')がどのくらい正確に動作するのかわからないので避けたいです。日付が年で終わらないか、ロケールが異なる番号システムを使用する可能性があります。ところで、はい、文字列表現で十分です:) – smddzcy

+0

ああ、理解しました。これはすべての言語で動作するようにしたいですか?私はotロケールの変換を推奨し、組み込み形式でDとMのみを選択します。私はちょうどその瞬間のソースコードを見て、ロケール形式でビルドする方法はないと思って、その部分(つまり年)を削除します。 (webbmのように) – JonLuca

0

は、それが動作する方法の例です:

var d = moment().locale('tr'); 
console.log(d.format('D MMMM')); 

JSFiddle:https://jsfiddle.net/webbm/wuwkwzou/

+0

'moment()。locale( 'en')。書式( 'D MMMM')'は '6月'です。これは間違いなく私が望むものではありません。私の例を見てください。 – smddzcy

関連する問題