Pregunta

¿Cómo puedo generar el nombre del mes (por ejemplo: octubre / octubre) a partir de este objeto de fecha en JavaScript?

var objDate = new Date("10/11/2009");
¿Fue útil?

Solución

Versión más corta:

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

Nota (2019-03-08): esta respuesta que escribí originalmente en 2009 no está actualizada. Consulte la respuesta de David Storey para obtener una mejor solución.

Otros consejos

Ahora es posible hacer esto con la API de internacionalización ECMAScript:

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

'long' usa el nombre completo del mes, 'short' para el nombre corto y 'narrow' para más versión mínima, como la primera letra en idiomas alfabéticos.

Puede cambiar la configuración regional de 'default' del navegador a la que desee (por ejemplo, 'en-us' ), y usará el nombre correcto para eso idioma / país

Con toLocaleString api debe pasar la configuración regional y las opciones cada vez. Si va a usar la misma información de configuración regional y opciones de formato en varias fechas diferentes, puede usar Intl.DateTimeFormat en su lugar:

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

Para obtener más información, consulte la publicación de mi blog en API de internacionalización .

Aquí hay otro, con soporte para localización :)

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']
    }
};

puede agregar fácilmente soporte para otros idiomas:

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

Si no le importa extender el prototipo de Fecha (y hay algunas buenas razones para no querer hacer esto), puede encontrar un método muy sencillo:

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"

Estas funciones se aplicarán a todos objetos Fecha de JavaScript.

Recomiendo de todo corazón la función format de , la moment.js , que puede usar así:

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

Usar "MMMM" en lugar de "MMM" si necesita el nombre completo del mes

Además de una larga lista de otras características, tiene una sólida soporte para la internacionalización .

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

Se puede usar como

var month_Name = new Date().getMonthName();

Puede usar datejs para hacer eso. Consulte FormatSpecifiers , MMMM le proporciona el nombre del mes:

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

¡Y datejs consiguió eso localizado para más de 150 locales! Ver aquí

Esto puede hacerse con un proceso fácil y común desde el objeto de fecha.

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

O puedes hacer un prototipo de fecha como

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

Ej:

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

var dateFormat4 = new Date (). getFormatDate (); # 16 de marzo de 2017

Prueba:

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

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

Aquí hay una forma que no depende de una matriz codificada y admite múltiples configuraciones regionales.

Si necesita una matriz completa:

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

Uso :

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

Si solo necesita un mes seleccionado (más rápido):

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

Uso :

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

Probado y funciona bien en Chrome e IE 11. En mozilla se necesitan algunas modificaciones, ya que devuelve la fecha completa.

Desafortunadamente, la mejor manera de extraer el nombre del mes es desde la representación de 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'

El formato natural en estos días es usar Moment.js.

La forma de obtener el mes en formato de cadena es muy simple en Moment.js, no es necesario codificar los nombres de los meses en su código: Para obtener el mes y año actuales en formato de nombre de mes y año completo (mayo de 2015):

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

En lugar de declarar una matriz que contiene todo el nombre del mes y luego señalar con un índice, también podemos escribirla en una versión más corta como se muestra a continuación:

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

Puede usar uno de los varios formateadores de fecha disponibles. Dado que esto se encuentra dentro de la especificación de JavaScript, estará disponible en los modos del navegador y del lado del servidor.

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

por ejemplo

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

Hay más en https: // desarrollador. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Con momentjs , simplemente use formato notación.

const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August

Almacene los nombres en una matriz y busque el índice del mes.

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

Método getMonth () de JavaScript

Si está usando jQuery, probablemente también esté usando jQuery UI, lo que significa que puede usar $. datepicker.formatDate () .

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

Si no desea utilizar una biblioteca externa, o almacenar una matriz de nombres de mes, o si la API de internacionalización ECMAScript no es lo suficientemente buena debido a la compatibilidad del navegador, siempre puede hacerlo de la manera tradicional extrayendo el información de la salida de la fecha:

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

Esto le daría el nombre abreviado del mes, p. Octubre. Creo que la fecha vendrá en todo tipo de formatos dependiendo de la inicialización y su ubicación, así que eche un vistazo a lo que toDateString () devuelve y vuelva a calcular su substring () valores basados ??en eso.

Mi mejor solución es la siguiente:

       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;

Si no desea utilizar el momento y desea mostrar el nombre del mes -

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

Esto también se puede hacer si está utilizando kendo.

kendo.toString(dateobject, "MMMM");

Aquí hay una lista de formateadores del sitio de kendo :

  

" d " Representa el día del mes, del 1 al 31.

     

" dd " El día del mes, del 01 al 31.

     

" ddd " El nombre abreviado del día de la semana.

     

" dddd " El nombre completo del día de la semana.

     

" f " Las décimas de segundo en un valor de fecha y hora.

     

" ff " Las centésimas de segundo en un valor de fecha y hora.

     

" fff " Los milisegundos en un valor de fecha y hora.

     

" M " El mes, del 1 al 12.

     

" MM " El mes, del 01 al 12.

     

" MMM " El nombre abreviado del mes.

     

" MMMM " El nombre completo del mes.

     

" h " La hora, usando un reloj de 12 horas del 1 al 12.

     

" hh " La hora, usando un reloj de 12 horas del 01 al 12.

     

" H " La hora, usando un reloj de 24 horas del 1 al 23.

     

" HH " La hora, usando un reloj de 24 horas del 01 al 23.

     

'' m '' El minuto, de 0 a 59.

     

"mm" El minuto, de 00 a 59.

     

" s " El segundo, del 0 al 59.

     

" ss " El segundo, de 00 a 59.

     

" tt " El designador AM / PM.

     

'' aa '' Los dos últimos caracteres del valor del año.

     

'' aaaa '' El valor total del año.

     

" zzz " La zona horaria local cuando se utilizan formatos para analizar cadenas de fechas UTC.

Tengo una solución parcial que se me ocurrió. Utiliza una expresión regular para extraer el nombre del mes y el día. Pero cuando miro a través de las opciones de Región e Idioma (Windows) me doy cuenta de que las diferentes culturas tienen un orden de formato diferente ... tal vez un mejor patrón de expresión regular podría ser útil.

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

Otra forma de formatear la fecha

new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"

Simplemente extendiendo las muchas otras excelentes respuestas, si está utilizando jQuery, podría hacer algo como

$.fn.getMonthName = function(date) {

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

    return monthNames[date.getMonth()];

};

donde date es igual a var d = new Date (somevalue) . La ventaja principal de esto es según @nickf dijo sobre evitar el espacio de nombres global.

Para obtener una matriz de nombre de mes:

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/

Usa este compañero

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

Simplemente escriba un contenedor simple alrededor de 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));

Un truco rápido que utilicé y que funciona bien:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top