Obtener el nombre del mes de la fecha

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

preguntado Oct 29 '09, 09:10

Seria bueno si stackoverflow.com/a/18648314/5846045 podría aceptarse para guiar a los futuros lectores a una mejor respuesta:

30 Respuestas

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 mía, que escribí originalmente en 2009, está desactualizada. Ver La respuesta de David Storey para una mejor solución.

respondido 08 mar '19, 13:03

es un poco frustrante que incluso tener new Date() volver Tue Sep 06 2011 20:02:25 GMT+0200 (CEST) lo que claramente significa que el objeto Date ya tiene todo esto definido internamente (nombres de mes y día de la semana), no es público, por lo que tenemos que escribirlo todo de nuevo. :( - Zanona

No es una solución ideal si hay que incluir nombres de meses para cada idioma admitido. Tiene que haber una mejor manera de usar String#split con toString or toDateString. - Ryan

varios idiomas = matriz multidimensional;) ​​traducciones ["monthName"] [currentLanguage] [d.getMonth ()] - nuala

@ zanona: un objeto de fecha no tiene necesariamente "todo esto definido internamente". Todo lo que se requiere en ECMA-262 es un valor del tiempo, que es un número. Lo que estás viendo es el resultado de Fecha.prototipo.toString, que depende de la implementación. - robar

@Devin, pero eso reasigna la matriz cada vez que desea acceder a ella. - cole johnson

Ahora es posible hacer esto con la API de internacionalización de 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 una versión más mínima, como la primera letra en idiomas alfabéticos.

Puede cambiar la configuración regional del navegador 'default' a cualquiera que desee (p. ej. 'en-us'), y utilizará el nombre correcto para ese idioma / país.

Con toLocaleStringabejas tienes que 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 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 el API de internacionalización.

Respondido 10 Jul 19, 19:07

Puedo confirmar que Safari Technology Preview es compatible con esto. Creo que debería ser la respuesta aceptada: Salman Hasrat Kan

Gran solución, pero para mi caso de uso, esto terminó siendo demasiado lento. Estaba procesando varios cientos de elementos y tenía un promedio de aproximadamente 1 ms por elemento para obtener tanto el mes como el año (cromo, safari). Terminé usando la respuesta aceptada, pero solo porque funcionó mucho mejor. Este sería mi método preferido si solo tuviera que llamarlo unas pocas veces. - t.888

Esto ahora es compatible con la mayoría de los navegadores: caniuse.com/#search=intl - eyal83

Tenga en cuenta que en React Native, esto funciona para dispositivos iOS, pero en Android, se muestra incorrectamente (solo escupe la marca de tiempo completa). - enfadado

Tenga en cuenta que esto no funciona en ninguna versión de IE (para todos los que tengan clientes empresariales). - explosió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']
    }
};

luego puede agregar fácilmente soporte para otros idiomas:

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

Respondido el 06 de Septiembre de 13 a las 02:09

Nota: esto no funcionará en el nodo a partir de 6.x como Date.locale is undefined. ¡Sin embargo, es una excelente respuesta para otras implementaciones de JS! - mikemaccana

Esto podría tener sentido si las matrices de nombres localizadas se construyeran utilizando Fecha.prototipo.toLocaleString. Además, no se considera una buena idea ampliar los prototipos y objetos integrados. - robar

Recomiendo de todo corazón el format función de, el momento.js biblioteca, 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

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

Además de una larga lista de otras características, tiene una fuerte apoyo a la internacionalización.

respondido 07 mar '19, 06:03

El primero resultaría en "abril". "MMM" muestra las tres primeras letras del mes, si desea el nombre completo utilice "MMMM" en su lugar. Ver su documentación por ayuda. - Tomnar

Si va por la ruta de una gran optimización y reduce las solicitudes http, es posible que esta no sea una opción para usted. En su lugar, limítese a usar una matriz de nombres de meses si solo va a formatear los nombres de los meses en una línea de código. - OzzyElGigante

El momento es un biblioteca grande, y exagerado para esto. Las alternativas modernas incluyen Luxon y date-fns, pero de nuevo, hay amplio soporte de navegador para la API de internacionalización hoy en día. - Dan Dascalescu

Si no le importa extender el prototipo Date (y hay algunas buenas razones para no querer hacer esto), puede encontrar un método muy fácil:

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 las Objetos de fecha javascript.

Respondido 29 Oct 09, 12:10

"y hay algunas buenas razones para no querer hacer esto". Solo curiosidad: ¿a qué razones te refieres? - kooiinc

@Kooilnc: Es porque esencialmente estás trabajando en el espacio global. Si importa las funciones o bibliotecas de otra persona que también hacen esto, es posible que se sobrescriban entre sí. - apodo

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

Respondido 17 ago 16, 09:08

Esto permite realizar un proceso sencillo 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())

por ejemplo:

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

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

Respondido 08 Oct 18, 12:10

¡Gracias! Todavía no entiendo los prototipos, pero estoy deseando probarlo. - Eric Hepperle - CodeSlayer2010

document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))

Respondido el 17 de enero de 20 a las 13:01

Podrías usar fechajs Para hacer eso. Comprobar el Especificadores de formato, MMMM le da el nombre del mes:

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

¡Y datejs lo ha localizado para más de 150 configuraciones regionales! Mira aquí

Respondido 29 Oct 09, 15:10

Simplemente podría usar Date.toLocaleDateString () y analizar la fecha deseada como parámetro

const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

const options = {  year: 'numeric', month: 'short', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('en-US', options));
// US format 


// In case you only want the month
console.log(event.toLocaleDateString(undefined, { month: 'short'}));
console.log(event.toLocaleDateString(undefined, { month: 'long'}));

Puedes encontrar más información en Firefox documentación

Respondido 23 Jul 20, 10:07

Tratar:

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

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

respondido 18 nov., 16:13

¡Esto funcionó en el invierno de 2017! El uso de "en-us" como lo sugirieron otros usuarios 3 años antes no funciona en Chrome. - Eric Hepperle - CodeSlayer2010

Otra forma de formatear la fecha

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

contestado el 21 de mayo de 19 a las 05:05

En lugar de declarar una matriz que contiene todo el nombre del mes y luego apuntar con un índice, también podemos escribirlo 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

Respondido 05 ago 16, 08:08

tenga en cuenta que esto no funciona de manera confiable en todos los navegadores ... Safari (móvil y escritorio) generará algo como eso: MAY 1, 2015 AT 12:00:00 AM GMT-4 (cuando usas { month: "long" } parámetros) - David M.

también puede obtener el valor predeterminado usando new Date().toLocaleString(navigator.language, { month: "short" }) - Remo H. Jansen

Esta es una forma que no depende de una matriz codificada de forma rígida y admite varias 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, porque devuelve la fecha completa.

Respondido 13 Feb 14, 08:02

Esto no funcionará ni siquiera en Safary todavía. Porque toLocaleString - sergei panfilov

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

respondido 06 mar '14, 23:03

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 sin necesidad de codificar los nombres de los meses en su código: Para obtener el mes y año actual en formato de nombre de mes y año completo (mayo de 2015):

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

contestado el 30 de mayo de 15 a las 19:05

con el momento ya instalado para otros propósitos, esta es la solución más simple. - Aplicaciones y complementos

El momento es un biblioteca grande, y exagerado para esto. Las alternativas modernas incluyen Luxon y date-fns, pero de nuevo, hay amplio soporte de navegador para la API de internacionalización hoy en día. - Dan Dascalescu

Puede utilizar uno de los varios formateadores de fecha disponibles. Dado que esto se encuentra dentro de la especificación de JavaScript, estará disponible tanto en el modo del navegador como en el del servidor.

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

p.ej

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://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

contestado el 30 de mayo de 13 a las 05:05

Probado en IE 11, Chrome, Firefox

const dt = new Date();
const locale = navigator.languages != undefined ? navigator.languages[0] : navigator.language;
const fullMonth = dt.toLocaleDateString(locale, {month: 'long'});
console.log(fullMonth);

Respondido 07 Oct 20, 03:10

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

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

Esto le daría el nombre del mes abreviado, por ejemplo, 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 toDateString() devuelve y vuelve a calcular tu substring() valores basados ​​en eso.

contestado el 28 de mayo de 14 a las 23:05

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

kendo.toString(dateobject, "MMMM");

Aquí hay una lista de formateadores de 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" 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 de 1 a 12.

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

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

"HH" La hora, utilizando 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, de 0 a 59.

"ss" El segundo, de 00 a 59.

"tt" El designador AM / PM.

"yy" 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 fecha UTC.

Respondido el 20 de junio de 20 a las 10:06

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

contestado el 24 de mayo de 13 a las 10:05

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;

Respondido 08 ago 14, 06:08

me parece bastante frágil ... y realmente no responde a la pregunta del OP: David M.

¿Qué hace que esta sea su "Mejor solución"? - Dan Dascalescu

Con momentojs, solo usa el formato notación.

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

Respondido 04 ago 16, 05:08

Además de que esta respuesta ya se ha dado 2 veces, moment es un biblioteca grande, y exagerado para esto. Las alternativas modernas incluyen Luxon y date-fns, pero de nuevo, hay amplio soporte de navegador para la API de internacionalización hoy en día. - Dan Dascalescu

Para mí, esta es la mejor solución:

para TypeScript también

const env = process.env.REACT_APP_LOCALE || 'en';

const namedMonthsArray = (index?: number): string[] | string => {
  const months = [];

  for (let month = 0; month <= 11; month++) {
    months.push(
      new Date(new Date('1970-01-01').setMonth(month))
        .toLocaleString(env, {
          month: 'long',
        })
        .toString(),
    );
  }
  if (index) {
    return months[index];
  }
  return months;
};

La salida es

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

Respondido 29 Jul 19, 16:07

Puede manejar con o sin traducir al idioma local.

  1. Genera valor como "11 de octubre de 2009"

const objDate = new Date("10/11/2009");
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
if (objDate !== 'Invalid Date' && !isNaN(objDate)) {
  console.log(objDate.getDate() + ' ' + months[objDate.getMonth()] + ' ' + objDate.getFullYear())
}

  1. La API de internacionalización de ECMAScript para traducir el mes al idioma local (por ejemplo: 11 de octubre)

const convertDate = new Date('10/11/2009')
const lang = 'fr' // de, es, ch 
if (convertDate !== 'Invalid Date' && !isNaN(convertDate)) {
  console.log(convertDate.getDate() + ' ' + convertDate.toLocaleString(lang, {
    month: 'long'
  }))
}

contestado el 15 de mayo de 20 a las 09:05

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

respondido 15 nov., 16:10

También se puede hacer de la siguiente manera:

var x = new Date().toString().split(' ')[1];    // "Jul"

Respondido 06 Jul 20, 17:07

Esta solución no debe usarse. Hay un método específico para obtener el mes en una cadena que otras respuestas señalaron, no es necesario extraerlo directamente de la fecha. Con este enfoque, no puede cambiar fácilmente entre idiomas. - rotimi-mejor

Puedes intentar esto:

var d = new Date();
var t = d.toDateString().split(" ");
t[2] +" "+t[1]+" "+t[3];

Respondido el 05 de enero de 21 a las 15:01

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

Respondido el 22 de Septiembre de 12 a las 16:09

entonces, mínimamente funciona con inglés y español ... id's sospechoso cualquier cosa que sea DÍA, MES fecha, año FORMATO - Remus

Lo he investigado un poco, creo que para tener una solución verdaderamente independiente del lenguaje, necesitaría tener una expresión regular que use rangos de caracteres UNICODE. Los rangos de caracteres serían diferentes para diferentes alfabetos, por lo que no creo que haya un tamaño único para todas las RegExp que podamos usar. - Remus

Para obtener el formato de fecha como "dd-MMM-aaaa" usando JavaScript, use el siguiente código

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

    const d = new Date();
    var dd = String(d.getDate()).padStart(2, '0');
    var mm = String(d.getMonth() + 1).padStart(2, '0');
    var yyyy = d.getFullYear();
    var fullDate = +dd +"-"+ monthNames[d.getMonth()] +"-"+ yyyy;
    document.write("The date is : "+ fullDate);

Respondido 27 Oct 20, 19:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.