如何在moment.js中本地化当前日期和月份(没有年份)?我想要的只是moment().format('LL')
的输出,但没有年份。
考虑以下示例:
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"
答案 0 :(得分:4)
对于所有支持的区域设置的容易出错的解决方案,您需要使用.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>
&#13;
答案 1 :(得分:0)
你只想要字符串表示吗?如果是这样,可能更容易从输出结尾修剪最后5个字符,如下所示:
var today = moment().locale('tr').format('LL') // "1 Haziran 2017"
today = today.substring(0, today.length - 5); // "1 Haziran"
这将在未来8000年内发挥作用,所以不必担心未来几年会破坏它。
您甚至可以进行更智能的正则表达式匹配,或者只是从字符串中删除“,20XX”中的所有内容。取决于你对它的使用,这更像是一个hacky解决方案而不是直接解决方案。
答案 2 :(得分:0)
这是一个如何运作的例子:
var d = moment().locale('tr');
console.log(d.format('D MMMM'));
JSFiddle:https://jsfiddle.net/webbm/wuwkwzou/