协慌网

登录 贡献 社区

从日期获取月份名称

如何从 JavaScript 中的日期对象生成月份名称(例如:Oct / October)?

var objDate = new Date("10/11/2009");

答案

较短的版本:

const monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];

const d = new Date();
document.write("The current month is " + monthNames[d.getMonth()]);

注意(2019-03-08)- 我最初在 2009 年写下的这个答案已经过时。请参阅David Storey 的答案以获得更好的解决方案。

现在可以使用 ECMAScript 国际化 API 来做到这一点:

const date = new Date(2009, 10, 10);  // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);

'long'使用月份的全名, 'short'使用短名称, 'narrow'使用更小的版本,例如字母语言中的第一个字母。

您可以将语言环境从浏览器的'default'更改为您喜欢的任何'en-us' ),它将使用该语言 / 国家 / 地区的正确名称。

使用toLocaleString api,您每次必须传递语言环境和选项。如果要在多个不同的日期使用相同的语言环境信息和格式选项,则可以改用Intl.DateTimeFormat

const formatter = new Intl.DateTimeFormat('fr', { month: 'short' });
const month1 = formatter.format(new Date());
const month2 = formatter.format(new Date(2003, 5, 12));
console.log(`${month1} and ${month2}`); // current month in French and "juin".

有关更多信息,请参阅我关于国际化 API 的博客文章。

这是另一个,支持本地化:)

Date.prototype.getMonthName = function(lang) {
    lang = lang && (lang in Date.locale) ? lang : 'en';
    return Date.locale[lang].month_names[this.getMonth()];
};

Date.prototype.getMonthNameShort = function(lang) {
    lang = lang && (lang in Date.locale) ? lang : 'en';
    return Date.locale[lang].month_names_short[this.getMonth()];
};

Date.locale = {
    en: {
       month_names: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
       month_names_short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    }
};

然后,您可以轻松添加对其他语言的支持:

Date.locale.fr = {month_names: [...]};