web-dev-qa-db-fra.com

Obtenir le nom du mois de Date

Comment puis-je générer le nom du mois (par exemple: oct/octobre) à partir de cet objet date en JavaScript?

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

Version plus courte:

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

946
Jesper

Il est maintenant possible de le faire avec l’API d’internationalisation ECMAScript:

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

long utilise le nom complet du mois, short pour le nom abrégé et narrow pour une version plus minimale, telle que la première lettre en langues alphabétiques.

Vous pouvez modifier les paramètres régionaux de en-us à n’importe laquelle des options de votre choix. Le nom approprié sera alors attribué à cette langue/ce pays. 

Avec toLocaleString, vous devez indiquer les paramètres régionaux et les options à chaque fois. Si vous allez utiliser les mêmes informations de localisation et les mêmes options de formatage à plusieurs dates différentes, vous pouvez utiliser Intl.DateTimeFormat à la place:

if (typeof Intl == 'object' && typeof Intl.DateTimeFormat == 'function') {
  var formatter = new Intl.DateTimeFormat("fr", {
      month: "short"
    }),
    month1 = formatter.format(new Date()),
    month2 = formatter.format(new Date(2003, 5, 12));

  // current month in French and "juin".
  console.log(month1 + " and " + month2);
  
} else {
  console.log('Intl.DateTimeFormat not supported');
}

Le principal problème de cette API est sa nouveauté. Il est uniquement disponible dans les navigateurs Blink (Chrome et Opera), IE11, Microsoft Edge, Firefox 29+ et Safari 10+.

Pour plus d'informations, consultez mon article de blog sur l'API Internationalisation .

464
David Storey

En voici un autre, avec prise en charge de la localisation :)

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

vous pouvez alors facilement ajouter un support pour d'autres langues:

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

Si cela ne vous dérange pas d'étendre le prototype Date (et qu'il existe de bonnes raisons de ne pas le faire), vous pouvez en fait trouver une méthode très simple:

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"

Ces fonctions s’appliqueront alors à tous javascript objets Date.

60
nickf

Je recommande vivement la fonction format de la bibliothèque moment.js , que vous pouvez utiliser comme ceci:

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

Outre une longue liste d'autres fonctionnalités, il possède un fort { support for internationalization } _.

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

Il peut être utilisé comme

var month_Name = new Date().getMonthName();
17
Beena Shetty

Vous pouvez utiliser datejs pour le faire. Vérifiez les FormatSpecifiers , MMMM vous donne le nom du mois:

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

Et datejs l’a localisée pour plus de 150 lieux! Vois ici

16
Tim Büthe

Certains processus simples à partir d’objets date peuvent être effectués de cette manière.

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

Ou vous pouvez faire un prototype de date comme

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

Ex: 

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

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

14
M.A.K. Ripon

Essayer:

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

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

Le format naturel de nos jours est d'utiliser Moment.js.

Pour obtenir le mois au format chaîne, il est très simple d'utiliser Moment.js. Il n'est pas nécessaire de coder en dur les noms de mois dans votre code: ):

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

Voici un moyen qui ne dépend pas d'un tableau codé en dur et prend en charge plusieurs paramètres régionaux.

Si vous avez besoin de tout un tableau:

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

Utilisation:

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

Si vous n'avez besoin que d'un mois sélectionné (plus rapide):

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

Utilisation:

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

Testé et fonctionne bien sous Chrome et IE 11. Sous Mozilla, certaines modifications sont nécessaires, car la date entière est renvoyée.

7

Au lieu de déclarer un tableau contenant le nom du mois, puis de le pointer avec un index, nous pouvons également l'écrire dans une version plus courte, comme ci-dessous:

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

Malheureusement, le meilleur moyen d'extraire le nom du mois est d'utiliser la représentation 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'
6
Aaron Cronin

Vous pouvez utiliser l’un des formats de formatage Date disponibles. Comme cela relève de la spécification JavaScript, il sera disponible dans les modes navigateur et côté serveur.

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

par exemple.

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

Il y en a plus à https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

5
Dinesh

Avec momentjs , utilisez simplement la notation format .

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

Stocker les noms dans un tableau et rechercher par l'index du mois.

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éthode JavaScript getMonth ()

2
rahul

Si vous utilisez jQuery, vous utilisez probablement aussi jQuery UI, ce qui signifie que vous pouvez utiliser $ .datepicker.formatDate () .

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

Si vous ne voulez pas utiliser moment et que vous voulez afficher le nom du mois - 

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

Si vous ne souhaitez pas utiliser une bibliothèque externe, ni stocker un tableau de noms de mois, ou si l'API d'internationalisation ECMAScript n'est pas assez performante en raison de la compatibilité du navigateur, vous pouvez toujours le faire à l'ancienne en extrayant les informations du fichier. date de sortie:

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

Cela vous donnerait le nom abrégé du mois, par exemple. Oct. Je pense que la date entrera dans toutes sortes de formats en fonction de l'initialisation et de vos paramètres régionaux. Consultez donc ce que toDateString() renvoie et recalculez vos valeurs substring() en fonction de cela.

2
Matt K

Cela peut aussi être fait si vous utilisez le kendo.

kendo.toString(dateobject, "MMMM");

Voici la liste des formateurs de site kendo :

"d" Rend le jour du mois, du 1 au 31.

"dd" Le jour du mois, du 01 au 31.

"ddd" Le nom abrégé du jour de la semaine.

"dddd" Nom complet du jour de la semaine.

"f" Les dixièmes de seconde dans une valeur de date et heure.

"ff" Les centièmes de seconde dans une valeur de date et heure.

"fff" Millisecondes dans une valeur de date et heure.

"M" Le mois, de 1 à 12.

"MM" Le mois, de 01 à 12.

"MMM" Le nom abrégé du mois.

"MMMM" Nom complet du mois.

"h" L'heure, en utilisant une horloge de 12 heures, allant de 1 à 12.

"hh" L'heure, en utilisant une horloge de 12 heures du 01 au 12.

"H" L'heure, en utilisant une horloge de 24 heures du 1 au 23.

"HH" L'heure, en utilisant une horloge de 24 heures du 01 au 23.

"m" La minute, de 0 à 59.

"mm" La minute, de 00 à 59.

"s" La seconde, de 0 à 59.

"ss" Le second, de 00 à 59.

"tt" Le désignateur AM/PM.

"yy" Les deux derniers caractères de la valeur de l'année.

"aaaa" La pleine valeur de l'année.

"zzz" Le fuseau horaire local lors de l'utilisation de formats pour analyser les chaînes de date UTC.

2
Navoneel Talukdar

Ma meilleure solution est la suivante:

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

J'ai une solution partielle que je suis venu avec. Il utilise une expression régulière pour extraire le nom du mois et du jour. Mais en parcourant les options Région et Langue (Windows), je me rends compte que différentes cultures ont un ordre de format différent. Peut-être qu'un meilleur modèle d’expression régulière pourrait être 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(","));
    }
1
Remus

Une autre façon de formater la date

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

Un rapide bidouillage que j'ai utilisé qui fonctionne 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);

0
James Heazlewood

Pour moi, la meilleure solution est,

pour TypeScript aussi

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 sortie est

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

Pour obtenir un tableau de nom de mois:

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/

0
vava

Écrivez simplement un simple wrapper autour 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));

0
John Slegers

Utilisez ce compagnon

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

En prolongeant les nombreuses autres excellentes réponses - si vous utilisez jQuery - vous pouvez faire quelque chose comme:

$.fn.getMonthName = function(date) {

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

    return monthNames[date.getMonth()];

};

date est égal à la var d = new Date(somevalue). Le principal avantage de ceci est que, selon @nickf, il faut éviter l’espace de noms global.

0
Tim