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


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

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

30 ответов:

более короткая версия:

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

теперь это можно сделать с помощью ECMAScript Internationalization API:

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

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

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

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

С 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.

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

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: [...]};

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

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.

Я сердечно рекомендую format

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

var dateToday = new Date();
var locale = "en-us";
var month = dateToday.toLocaleString(locale, {month: "long"});
alert(month);
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();

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

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

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

некоторые общие легкий процесс от объекта даты может быть сделано этим.

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

попробуй:

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

var strDate =
    objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
    objDate.toLocaleString("en", { month: "long"  }) + ' ' +
    objDate.toLocaleString("en", { year: "numeric"});

естественный формат в эти дни, чтобы использовать момент.js.

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

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

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

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

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 необходимы некоторые модификации, потому что она возвращает все дата.

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

var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug

вы можете использовать один из нескольких доступных форматов даты. Поскольку это входит в спецификацию 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://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

к сожалению, лучший способ извлечь имя месяца из представления 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'

С momentjs, просто использовать

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

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 () метод

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

       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;

есть действительно полезная дата болт-на здесь: http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/methods/date.js?r=6305 Это расширяет встроенный класс Date с помощью таких методов, как getMonthName() и т. д..

Если вы используете jQuery, вы, вероятно, также с помощью jQuery пользовательского интерфейса, что означает, что вы можете использовать $.элемент управления datepicker.formatDate ().

$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] );   // dutch
$.datepicker.formatDate( "dd MM yy", objDate );

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

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

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

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

.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;
      }
    };
  }

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

kendo.toString(dateobject, "MMMM");

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

"d" отображает день месяца, от 1 до 31.

" dd " день месяца, с 01 по 31.

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

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

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

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

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

" м " месяц, с 1 по 12.

" мм " месяц, с 01 по 12.

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

"мммм", полное название месяца.

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

" чч " час, используя 12-часовые часы с 01 до 12.

" H " час, используя 24-часовые часы от 1 до 23.

" чч " час, используя 24-часовые часы с 01 до 23.

" m " минута, от 0 до 59.

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

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

" ss " второй, с 00 до 59.

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

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

"гггг" полное значение года.

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

function getMonthName(month) 
{ 
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-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(","));
    }

просто расширяясь на многие другие отличные ответы - если вы используете 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 сказал об избежании глобального пространства имен.

использовать этот мат

function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}

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

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/

просто напишите простую обертку вокруг 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));

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

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