Получить название месяца от даты - PullRequest
577 голосов
/ 29 октября 2009

Как я могу сгенерировать название месяца (например, октябрь / октябрь) из этого объекта даты в JavaScript?

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

Ответы [ 29 ]

982 голосов
/ 29 октября 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 году, устарел. См. Ответ Дэвида Стори для лучшего решения.

553 голосов
/ 06 сентября 2013

Теперь это можно сделать с помощью API интернационализации ECMAScript:

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

long использует полное название месяца, short для короткого имени и narrow для более минимальной версии, такой как первая буква в алфавитных языках.

Вы можете изменить локаль с en-us на любую, какую пожелаете, и она будет использовать правильное название для этого языка / страны.

С toLocaleString вы должны каждый раз передавать локаль и опции. Если вы собираетесь использовать одну и ту же информацию о локали и параметры форматирования для нескольких разных дат, вы можете использовать Intl.DateTimeFormat вместо:

if (typeof Intl == 'object' && typeof Intl.DateTimeFormat == 'function') {
  var formatter = new Intl.DateTimeFormat("fr", {
      month: "short"
    }),
    month1 = formatter.format(new Date()),
    month2 = formatter.format(new Date(2003, 5, 12));

  // current month in French and "juin".
  console.log(month1 + " and " + month2);
  
}

Для получения дополнительной информации см. Мой пост в блоге по Интернационализация API .

158 голосов
/ 29 октября 2009

Вот еще один, с поддержкой локализации:)

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: [...]};
61 голосов
/ 29 октября 2009

Если вы не возражаете против расширения прототипа Date (и есть некоторые веские причины, по которым вы не хотите этого делать), вы можете придумать очень простой метод:

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

Date.prototype.getMonthName = function() {
    return this.monthNames[this.getMonth()];
};
Date.prototype.getShortMonthName = function () {
    return this.getMonthName().substr(0, 3);
};

// usage:
var d = new Date();
alert(d.getMonthName());      // "October"
alert(d.getShortMonthName()); // "Oct"

Эти функции затем будут применяться к всем объектам JavaScript javascript.

56 голосов
/ 18 апреля 2013

От всей души рекомендую функцию format из библиотеки moment.js , которую вы можете использовать следующим образом:

moment().format("MMM");  // "Apr" - current date
moment(new Date(2012, 01, 04)).format("MMM");  // "Feb" - from a local date
moment.utc(new Date(2012, 00, 04).format("MMM"); // "Jan" - from a UTC date

Используйте «ММММ» вместо «МММ», если вам нужно полное название месяца

В дополнение к длинному списку других функций, он имеет сильную поддержку интернационализации .

19 голосов
/ 12 июня 2012
Date.prototype.getMonthName = function() {
    var monthNames = [ "January", "February", "March", "April", "May", "June", 
                       "July", "August", "September", "October", "November", "December" ];
    return monthNames[this.getMonth()];
}

Может использоваться как

var month_Name = new Date().getMonthName();
17 голосов
/ 15 ноября 2015

С помощью этого можно выполнить несколько простых операций с датой.

var monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];
var monthShortNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];

function dateFormat1(d) {
  var t = new Date(d);
  return t.getDate() + ' ' + monthNames[t.getMonth()] + ', ' + t.getFullYear();
}

function dateFormat2(d) {
  var t = new Date(d);
  return t.getDate() + ' ' + monthShortNames[t.getMonth()] + ', ' + t.getFullYear();
}

console.log(dateFormat1(new Date()))
console.log(dateFormat2(new Date()))

Или вы можете сделать прототип даты как

Date.prototype.getMonthName = function() {
  var monthNames = ["January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
  ];
  return monthNames[this.getMonth()];
}


Date.prototype.getFormatDate = function() {
  var monthNames = ["January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
  ];
  return this.getDate() + ' ' + monthNames[this.getMonth()] + ', ' + this.getFullYear();
}


console.log(new Date().getMonthName())
console.log(new Date().getFormatDate())

Пример:

var dateFormat3 = new Date().getMonthName(); # March

var dateFormat4 = new Date().getFormatDate(); # 16 March, 2017

17 голосов
/ 29 октября 2009

Вы можете использовать datejs , чтобы сделать это. Проверьте FormatSpecifiers , ММММ дает название месяца:

var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));

И datejs получил это локализованным для более чем 150 локалей! Смотри здесь

11 голосов
/ 18 ноября 2016

Попробуйте:

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

var strDate =
    objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
    objDate.toLocaleString("en", { month: "long"  }) + ' ' +
    objDate.toLocaleString("en", { year: "numeric"});
8 голосов
/ 30 мая 2015

Естественным форматом в наши дни является использование Moment.js.

Способ получения месяца в строковом формате очень прост в Moment.js, не нужно жестко кодировать названия месяцев в своем коде Чтобы получить текущий месяц и год в формате названия месяца и полного года (май 2015 года):

  moment(new Date).format("MMMM YYYY");
...