Domanda

Come posso generare il nome del mese (es: ottobre / ottobre) da questo oggetto data in JavaScript?

var objDate = new Date("10/11/2009");
È stato utile?

Soluzione

Versione più breve:

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 (08-03-2019) - Questa mia risposta, che ho scritto in origine nel 2009, è obsoleta. Vedi la risposta di David Storey per una soluzione migliore.

Altri suggerimenti

Ora è possibile farlo con l'API di internazionalizzazione ECMAScript:

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

'long' utilizza il nome completo del mese, 'short' per il nome breve e 'narrow' per un altro versione minima, come la prima lettera in lingue alfabetiche.

Puoi cambiare le impostazioni locali dal 'default' del browser a quello che ti piace (es. 'en-us' ), e userà il nome giusto per quello lingua / paese.

Con toLocaleString api devi passare ogni volta le impostazioni locali e le opzioni. Se hai intenzione di utilizzare le stesse informazioni sulla locale e le stesse opzioni di formattazione in più date diverse, puoi invece utilizzare Intl.DateTimeFormat :

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

Per ulteriori informazioni consultare il mio post sul blog API di internazionalizzazione .

Eccone un altro, con supporto per la localizzazione :)

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

puoi quindi aggiungere facilmente il supporto per altre lingue:

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

Se non ti dispiace estendere il prototipo Date (e ci sono alcuni buoni motivi per non voler farlo), puoi effettivamente trovare un metodo molto semplice:

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"

Queste funzioni verranno quindi applicate a tutti gli oggetti Date javascript.

Consiglio vivamente la funzione format di , la moment.js , che puoi utilizzare in questo modo:

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

Usa " MMMM " invece di " MMM " se hai bisogno del nome completo del mese

Oltre a un lungo elenco di altre funzionalità, ha un supporto per l'internazionalizzazione .

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

Può essere usato come

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

Per farlo, puoi utilizzare datejs . Controlla FormatSpecifiers , MMMM ti dà il nome del mese:

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

E datejs lo ha localizzato per oltre 150 locali! Vedi qui

In questo modo è possibile eseguire un processo semplice dalla data dell'oggetto.

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

Oppure puoi creare un prototipo di data come

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

Es .:

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

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

Prova:

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

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

Ecco un modo che non dipende da un array hardcoded e supporta più localizzazioni.

Se hai bisogno di un intero array:

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

Utilizzo:

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

Se hai bisogno solo di un mese selezionato (più veloce):

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

Utilizzo:

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

Testato e funziona perfettamente su Chrome e IE 11. Su mozilla sono necessarie alcune modifiche, perché restituisce l'intera data.

Sfortunatamente il modo migliore per estrarre il nome del mese è dalla rappresentazione 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'

Il formato naturale in questi giorni è usare Moment.js.

Il modo di ottenere il mese in un formato stringa, è molto semplice in Moment.js, non è necessario codificare i nomi dei mesi nel codice: Per ottenere il mese e l'anno correnti in formato nome mese e anno completo (maggio 2015):

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

Invece di dichiarare un array che contiene tutto il nome del mese e quindi punta con un indice, possiamo anche scriverlo in una versione più breve come di seguito:

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

Puoi utilizzare uno dei numerosi formattatori di date disponibili. Poiché questo rientra nelle specifiche JavaScript, sarà disponibile sia in modalità browser che lato server.

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

per es.

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

Ce ne sono altri su https: // developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Con momentjs , basta usare formato notazione.

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

Memorizza i nomi in un array e cerca l'indice del mese.

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

Metodo getMonth () JavaScript

Se stai usando jQuery, probabilmente stai anche usando l'interfaccia utente jQuery, il che significa che puoi usare $. datepicker.formatDate () .

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

Se non si desidera utilizzare una libreria esterna o memorizzare una matrice di nomi di mese o se l'API di internazionalizzazione ECMAScript non è abbastanza buona a causa della compatibilità del browser, è sempre possibile farlo alla vecchia maniera estraendo il informazioni dall'output della data:

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

Questo ti darebbe il nome del mese abbreviato, ad es. Ott. Credo che la data arriverà in tutti i tipi di formati a seconda dell'inizializzazione e delle impostazioni internazionali, quindi dai un'occhiata a cosa restituisce toDateString () e ricalcola il tuo substring () valori basati su quello.

La mia migliore soluzione è la seguente:

       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;

Se non si desidera utilizzare il momento e si desidera visualizzare il nome del mese -

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

Questo può essere fatto anche se stai usando il kendo.

kendo.toString(dateobject, "MMMM");

Ecco un elenco di formattatori dal sito kendo :

  

" d " Rende il giorno del mese, dall'1 al 31.

     

" dd " Il giorno del mese, dall'01 al 31.

     

" ddd " Il nome abbreviato del giorno della settimana.

     

" dddd " Il nome completo del giorno della settimana.

     

" f " I decimi di secondo in un valore di data e ora.

     

" ff " I centesimi di secondo in un valore di data e ora.

     

" FFF " I millisecondi in un valore di data e ora.

     

" M " Il mese, dall'1 al 12.

     

" MM " Il mese, da 01 a 12.

     

" MMM " Il nome abbreviato del mese.

     

" MMMM " Il nome completo del mese.

     

" h " L'ora, utilizzando un orologio di 12 ore da 1 a 12.

     

" hh " L'ora, utilizzando un orologio a 12 ore dalle 01 alle 12.

     

" H " L'ora, utilizzando un orologio di 24 ore da 1 a 23.

     

" HH " L'ora, utilizzando un orologio di 24 ore dalle 01 alle 23.

     

" m " Il minuto, da 0 a 59.

     

" mm " Il minuto, dalle 00 alle 59.

     

" s " Il secondo, da 0 a 59.

     

" ss " Il secondo, da 00 a 59.

     

" tt " Il designatore AM / PM.

     

" yy " Gli ultimi due caratteri del valore dell'anno.

     

" aaaa " Il valore completo dell'anno.

     

" zzz " Il fuso orario locale quando si utilizzano i formati per analizzare le stringhe di date UTC.

Ho una soluzione parziale che mi è venuta in mente. Utilizza un'espressione regolare per estrarre il nome del mese e del giorno. Ma mentre guardo le opzioni di Regione e Lingua (Windows) mi rendo conto che culture diverse hanno un ordine di formato diverso ... forse un modello di espressione regolare migliore potrebbe essere utile.

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

Un altro modo per formattare la data

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

Estendendo solo molte altre eccellenti risposte - se stai usando jQuery - potresti semplicemente fare qualcosa del genere

$.fn.getMonthName = function(date) {

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

    return monthNames[date.getMonth()];

};

dove date è uguale a var d = new Date (somevalue) . Il vantaggio principale di questo è per @nickf detto di evitare lo spazio dei nomi globale.

Per ottenere una matrice del nome del mese:

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 questo compagno

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

Basta scrivere un semplice wrapper in inLocaleString :

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 trucco rapido che ho usato che funziona bene:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top