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");
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()]);
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 .
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: [...]};
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.
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 } _.
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();
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
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
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"});
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");
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.
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
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'
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
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()]);
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 );
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;
}
};
}
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.
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.
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;
function getMonthName(month)
{
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-1]
}
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(","));
}
Une autre façon de formater la date
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
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);
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"]
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
É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));
Utilisez ce compagnon
function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}
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()];
};
où 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.