Получить название месяца от даты

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

var objDate = new Date("10/11/2009");
вопрос задан 29.10.2009
Shyju
139547 репутация

30 ответов


  • 889 рейтинг

    Укороченная версия:

    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()]);
    ответ дан Jesper, с репутацией 147094, 29.10.2009
  • 395 рейтинг

    Теперь это можно сделать с помощью интерфейса ECMAScript Internationalization:

    var date = new Date("10/11/2009"),
        locale = "en-us",
        month = date.toLocaleString(locale, { month: "long" });
    

    http: // jsfiddle. net / dstorey / Xgerq /

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

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

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

    var formatter = new Intl.DateTimeFormat("fr", { month: "short" }),
    month1 = formatter.format(new Date()),
    month2 = formatter.format(new Date(2003-05-12));
    
    // sept. and déc.
    console.log(month1 + " and " + month2);
    

    Основная проблема с этим API - это новое. Он доступен только в браузерах Blink (Chrome и Opera), IE11, Microsoft Edge, Firefox 29+ и Safari 10+

    .

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

    ответ дан David Storey, с репутацией 14559, 6.09.2013
  • 154 рейтинг

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

    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: [...]};
    
    ответ дан krcko, с репутацией 2490, 29.10.2009
  • 60 рейтинг

    Если вы не возражаете против расширения прототипа 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 объектам Date.

    ответ дан nickf, с репутацией 362144, 29.10.2009
  • 52 рейтинг

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

    moment().format("MMM");  // "April" - 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
    

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

    ответ дан Brian M. Hunt, с репутацией 35082, 18.04.2013
  • 47 рейтинг

    Чтобы получить текущий месяц без ввода даты, используйте этот код:

    var dateToday = new Date();
    var locale = "en-us";
    var month = dateToday.toLocaleString(locale, {month: "long"});
    alert(month);
    
    ответ дан 1ben99, с репутацией 494, 26.09.2017
  • 18 рейтинг
    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();
    
    ответ дан Beena Shetty, с репутацией 2476, 12.06.2012
  • 17 рейтинг

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

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

    А у datejs есть локализация для более чем 150 локалей! Смотрите здесь

    ответ дан Tim Büthe, с репутацией 46200, 29.10.2009
  • 12 рейтинг

    Это может сделать несколько простых процессов из объекта date.

    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();
    }
    

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

    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();
    }
    

    Пример:

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

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

    ответ дан M A K Ripon, с репутацией 515, 15.11.2015
  • 10 рейтинг

    Попробуйте:

    var objDate = new Date("10/11/2009");
    
    var strDate =
        objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
        objDate.toLocaleString("en", { month: "long"  }) + ' ' +
        objDate.toLocaleString("en", { year: "numeric"});
    
    ответ дан beneus, с репутацией 101, 18.11.2016
  • 8 рейтинг

    В наши дни естественным форматом является использование Момента. JS.

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

      moment(new Date).format("MMMM YYYY");
    
    ответ дан shacharsol, с репутацией 1751, 30.05.2015
  • 7 рейтинг

    Вот способ, который не зависит от жестко запрограммированного массива и поддерживает несколько локалей.

    Если вам нужен весь массив:

    var monthsLocalizedArray = function(locale) {
        var result = [];
        for(var i = 0; i < 12; i++) {
            result.push(new Date(2010,i).toLocaleString(locale,{month:"long"}));
        }
        return result;
    };
    

    Использование:

    console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
    console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
    

    Если вам нужен только выбранный месяц (быстрее):

    var monthLocalizedString = function(month, locale) {
        return new Date(2010,month).toLocaleString(locale,{month:"long"});
    };
    

    Использование:

    console.log(monthLocalizedString(1, 'en')); // -> February
    console.log(monthLocalizedString(1, 'bg')); // -> февруари
    console.log(monthLocalizedString(1, 'de')); // -> Februar
    

    Протестировано и отлично работает на Chrome и IE 11. На mozilla нужны некоторые модификации, потому что она возвращает всю дату.

    ответ дан Дамян Станчев, с репутацией 1929, 13.02.2014
  • 6 рейтинг

    Вместо того, чтобы объявлять массив, который содержит все название месяца, а затем указывать с индексом, мы также можем записать его в более короткой версии, как показано ниже:

    var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
    var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
    
    ответ дан Anand kumar, с репутацией 61, 5.08.2016
  • 5 рейтинг
    ответ дан lnmunhoz, с репутацией 119, 4.08.2016
  • 5 рейтинг

    К сожалению, лучший способ извлечь название месяца из представления UTCString:

    Date.prototype.monthName = function() {
        return this.toUTCString().split(' ')[2]
    };
    
    d = new Date();
    //=> Thu Mar 06 2014 23:05:21 GMT+0000 (GMT)
    
    d.monthName();
    //=> 'Mar'
    
    ответ дан Aaron Cronin, с репутацией 1763, 6.03.2014
  • 5 рейтинг

    Вы можете использовать один из нескольких доступных форматеров даты. Поскольку это входит в спецификацию JavaScript, оно будет доступно как в браузерном, так и в серверном режимах.

    objDate.toString().split(" ")[1]; // gives short name, unsure about locale 
    objDate.toLocaleDateString.split(" ")[0]; // gives long name
    

    эл. г.

    js> objDate = new Date(new Date() - 9876543210)
    Mon Feb 04 2013 12:37:09 GMT-0800 (PST)
    js> objDate.toString().split(" ")[1]
    Feb
    js> objDate.toLocaleString().split(" ")[0]
    February
    

    Есть больше на https: // разработчик. Mozilla. org / en-US / docs / Web / JavaScript / Reference / Global_Objects / Date

    ответ дан Dinesh, с репутацией 2413, 30.05.2013
  • 3 рейтинг

    Храните имена в массиве и ищите по индексу месяца.

    var month=new Array(12);
    month[0]="January";
    month[1]="February";
    month[2]="March";
    month[3]="April";
    month[4]="May";
    month[5]="June";
    month[6]="July";
    month[7]="August";
    month[8]="September";
    month[9]="October";
    month[10]="November";
    month[11]="December";
    
    document.write("The current month is " + month[d.getMonth()]);
    

    JavaScript getMonth () Метод

    ответ дан rahul, с репутацией 146590, 29.10.2009
  • 3 рейтинг

    Мое лучшее решение заключается в следующем:

           var dateValue = Date();
           var month = dateValue.substring(4,7);
           var date = dateValue.substring(8,10);
           var year = dateValue.substring(20,24);
           var finaldateString = date+"-"+month+"-"+year;
    
    ответ дан user3920942, с репутацией 47, 8.08.2014
  • 2 рейтинг

    Здесь действительно полезная дата: http: // code. Google. ком / р / jqueryjs / источник / просмотр / багажник / плагины / методы / дата. JS? r = 6305 Это расширяет встроенный класс Date с помощью таких методов, как getMonthName () и т. Д. ,

    ответ дан markd, с репутацией 76, 23.05.2012
  • 2 рейтинг
    function getMonthName(month) 
    { 
    return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-1]
    }
    
    ответ дан John Nikho, с репутацией 21, 20.07.2017
  • 2 рейтинг

    Если вы используете jQuery, вы, вероятно, также используете jQuery UI, что означает, что вы можете использовать $. DatePicker. formatDate () .

    $.datepicker.setDefaults( $.datepicker.regional[ "nl" ] );   // dutch
    $.datepicker.formatDate( "dd MM yy", objDate );
    
    ответ дан mhu, с репутацией 14564, 24.05.2013
  • 2 рейтинг

    Если вы не хотите использовать момент и хотите отобразить название месяца -

    .config($mdDateLocaleProvider) {
        $mdDateLocaleProvider.formatDate = function(date) {      
          if(date !== null) {
            if(date.getMonthName == undefined) {
              date.getMonthName = function() {
                var monthNames = [ "January", "February", "March", "April", "May", "June", 
                "July", "August", "September", "October", "November", "December" ];
                return monthNames[this.getMonth()];
              }
            }        
            var day = date.getDate();
            var monthIndex = date.getMonth();
            var year = date.getFullYear();
            return day + ' ' + date.getMonthName() + ' ' + year;
          }
        };
      }
    
    ответ дан Kanchan, с репутацией 676, 15.11.2016
  • 2 рейтинг

    Если вы не хотите использовать внешнюю библиотеку или хранить массив названий месяцев, или если API интернационализации ECMAScript недостаточно хорош из-за совместимости с браузером, вы всегда можете сделать это старомодным способом, извлекая информацию из дата выхода:

    var now = new Date();
    var monthAbbrvName = now.toDateString().substring(4, 7);
    

    Это даст вам сокращенное название месяца, e. г. Октябрь Я полагаю, что дата придет во всевозможных форматах в зависимости от инициализации и вашей локали, поэтому посмотрите, что возвращает toDateString(), и пересчитайте ваши значения substring() на основании этого.

    ответ дан Matt K, с репутацией 4782, 28.05.2014
  • 2 рейтинг

    Это также можно сделать, если вы используете кендо.

    kendo.toString(dateobject, "MMMM");
    

    Вот список форматеров с сайта кендо :

    «d» Отображает день месяца с 1 по 31.

    «дд» День месяца с 01 по 31.

    "ddd" Сокращенное название дня недели.

    "dddd" Полное название дня недели.

    "f" Десятые доли секунды в значении даты и времени.

    "ff" Сотые доли секунды в значении даты и времени.

    "fff" Миллисекунды в значении даты и времени.

    «М» Месяц с 1 по 12.

    «ММ» Месяц с 01 по 12.

    "МММ" Сокращенное название месяца.

    "ММММ" Полное название месяца.

    «h» Час, используя 12-часовые часы от 1 до 12.

    «чч» Час, используя 12-часовые часы с 01 по 12.

    «H» Час, используя 24-часовые часы с 1 по 23.

    «ЧЧ» Час, используя 24-часовые часы с 01 по 23

    «м» Минуты от 0 до 59.

    "мм" минута с 00 по 59.

    "s" Второй, от 0 до 59.

    «сс» Второй, с 00 по 59.

    "tt" Обозначение AM / PM.

    "yy" Два последних символа из значения года.

    "гггг" Год полной стоимости.

    "zzz" Местный часовой пояс при использовании форматов для разбора строк даты UTC.

    ответ дан Neel, с репутацией 2448, 10.04.2017
  • 1 рейтинг

    Используйте этот помощник

    function month(a){
    var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
    return mNames[a-1];
    }
    
    ответ дан Tegar Dazzly, с репутацией 24, 18.03.2018
  • 1 рейтинг

    У меня есть частичное решение, которое я придумал. Он использует регулярное выражение для извлечения названия месяца и дня. Но когда я просматриваю опции «Регион и язык» (Windows), я понимаю, что разные культуры имеют разный порядок форматирования. , , может быть, лучше использовать шаблон регулярного выражения.

    function testDateInfo() {
            var months = new Array();
            var days = new Array();
            var workingDate = new Date();
            workingDate.setHours(0, 0, 0, 0);
            workingDate.setDate(1);
            var RE = new RegExp("([a-z]+)","ig");
            //-- get day names 0-6
            for (var i = 0; i < 7; i++) {
    
                var day = workingDate.getDay();
                //-- will eventually be in order
                if (days[day] == undefined)
                    days[day] = workingDate.toLocaleDateString().match(RE)[0];
                workingDate.setDate(workingDate.getDate() + 1);
            }
            //--get month names 0-11
            for (var i = 0; i < 12; i++) {
                workingDate.setMonth(i);
                months.push(workingDate.toLocaleDateString().match(RE)[1]);
            }
            alert(days.join(",") + " \n\r " + months.join(","));
        }
    
    ответ дан Remus, с репутацией 41, 12.09.2012
  • 1 рейтинг

    Просто расширив многие другие превосходные ответы - если вы используете jQuery - вы можете просто сделать что-то вроде

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

    , где date равен var d = new Date(somevalue). Основное преимущество этого в per @nickf говорит о том, что нужно избегать глобального пространства имен.

    ответ дан Tim, с репутацией 2123, 9.03.2013
  • 0 рейтинг

    Быстрый взлом, который я использовал, который хорошо работает:

    const monthNumber = 8;
    const yearNumber = 2018;
    const date = `${['Jan', 'Feb', 'Mar', 'Apr',
      'May', 'Jun', 'Jul', 'Aug',
      'Sep', 'Oct', 'Nov', 'Dec'][monthNumber - 1]
          } ${yearNumber}`;
    
    console.log(date);
    ответ дан James Heazlewood, с репутацией 50, 9.08.2018
  • 0 рейтинг

    Чтобы получить массив с названием месяца:

    Date.monthNames = function( ) {
    var arrMonth = [],
        dateRef = new Date(),
        year = dateRef.getFullYear();
    
    dateRef.setMonth(0);
    while (year == dateRef.getFullYear()) {
        /* push le mois en lettre et passe au mois suivant */
        arrMonth.push( (dateRef.toLocaleString().split(' '))[2] );
        dateRef.setMonth( dateRef.getMonth() + 1);
    }
    
    return arrMonth;
    }
    
    alert(Date.monthNames().toString());
    
    // -> janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre
    

    http: // jsfiddle. net / polinux / qb346 /

    ответ дан vava, с репутацией 11, 24.01.2014
  • 0 рейтинг

    Просто напишите простую обертку вокруг toLocaleString:

    function LocalDate(locale) {
      this.locale = locale;
    }
    
    LocalDate.prototype.getMonthName = function(date) {
      return date.toLocaleString(this.locale,{month:"long"});
    };
    
    var objDate = new Date("10/11/2009");
    
    var localDate = new LocalDate("en");
    console.log(localDate.getMonthName(objDate));
    
    localDate.locale = "ru";
    console.log(localDate.getMonthName(objDate));
    
    localDate.locale = "zh";
    console.log(localDate.getMonthName(objDate));
    ответ дан John Slegers, с репутацией 26343, 10.05.2018