Comment puis-je générer le nom du mois (par exemple: octobre / octobre) à partir de cet objet de date en JavaScript?
var objDate = new Date("10/11/2009");
Comment puis-je générer le nom du mois (par exemple: octobre / octobre) à partir de cet objet de date en JavaScript?
var objDate = new Date("10/11/2009");
Réponses:
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()]);
Note (2019-03-08) - Cette réponse que j'ai écrite à l'origine en 2009 est obsolète. Voir la réponse de David Storey pour une meilleure solution.
new Date()
retour, Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)
ce qui signifie clairement que l'objet Date ait déjà tout cela défini en interne (noms de mois et de jours de la semaine), il ne soit pas public, nous devons donc tout taper à nouveau. :(
String#split
avec toString
ou toDateString
.
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('default', { month: 'long' });
console.log(month);
'long'
utilise le nom complet du mois, 'short'
pour le nom court et 'narrow'
pour une version plus minimale, comme la première lettre dans les langues alphabétiques.
Vous pouvez changer les paramètres régionaux du navigateur 'default'
en ceux qui vous plaisent (par exemple 'en-us'
), et il utilisera le bon nom pour cette langue / pays.
Avec l' toLocaleString
api, vous devez passer à chaque fois les paramètres régionaux et les options. Si vous allez utiliser les mêmes informations de paramètres régionaux et options de formatage à plusieurs dates différentes, vous pouvez utiliser à la Intl.DateTimeFormat
place:
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".
Pour plus d'informations, consultez mon article de blog sur l' API d'internationalisation .
En voici une 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 ensuite facilement ajouter la prise en charge d'autres langues:
Date.locale.fr = {month_names: [...]};
Date.locale
est undefined
. c'est une excellente réponse pour les autres implémentations JS!
Si cela ne vous dérange pas d'étendre le prototype Date (et il y a de bonnes raisons de ne pas vouloir 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 les objets Date javascript.
Je recommande chaleureusement la format
fonction de la bibliothèque moment.js , que vous pouvez utiliser comme ceci:
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
Utilisez "MMMM" au lieu de "MMM" si vous avez besoin du nom complet du mois
En plus d'une longue liste d'autres fonctionnalités, il bénéficie d'un solide soutien à l'internationalisation .
Luxon
et date-fns
, mais là encore, il existe un large support de navigateur pour l'API d'internationalisation de nos jours .
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();
Un processus simple courant à partir d'un objet date peut être effectué par cela.
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
Vous pouvez utiliser datejs pour ce 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é pour plus de 150 locales! Vois ici
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"});
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 d'un tableau complet:
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;
};
Usage:
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"});
};
Usage:
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
Testé et fonctionne très bien sur Chrome et IE 11. Sur mozilla, certaines modifications sont nécessaires, car il renvoie la date entière.
toLocaleString
Malheureusement, la meilleure façon d'extraire le nom du mois est à partir de 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'
Au lieu de déclarer un tableau qui contient tout le nom du mois, puis de 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
MAY 1, 2015 AT 12:00:00 AM GMT-4
(lors de l'utilisation des { month: "long" }
paramètres)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
Le format naturel de nos jours est d'utiliser Moment.js.
La façon d'obtenir le mois sous forme de chaîne est très simple dans Moment.js pas besoin de coder en dur les noms de mois dans votre code: Pour obtenir le mois et l'année en cours au format de nom de mois et l'année complète (mai 2015):
moment(new Date).format("MMMM YYYY");
Luxon
et date-fns
, mais là encore, il existe aujourd'hui un large support de navigateur pour l'API d'internationalisation .
Une autre façon de formater la date
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Vous pouvez utiliser l'un des nombreux formats de date disponibles. Étant donné que cela relève de la spécification JavaScript, il sera disponible à la fois en mode 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 sur https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Si vous ne souhaitez pas utiliser une bibliothèque externe, ou stocker un tableau de noms de mois, ou si l'API d'internationalisation ECMAScript n'est pas assez bonne en raison de la compatibilité du navigateur, vous pouvez toujours le faire à l'ancienne en extrayant les informations de la sortie de date:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Cela vous donnerait le nom abrégé du mois, par exemple octobre. Je pense que la date viendra dans toutes sortes de formats en fonction de l'initialisation et de vos paramètres régionaux, alors regardez ce qui toDateString()
retourne et recalculez vos substring()
valeurs en fonction de cela.
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 );
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;
Avec momentjs , utilisez simplement la notation de format .
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
c'est une très grande bibliothèque, et beaucoup trop pour cela. Les alternatives modernes incluent Luxon
et date-fns
, mais là encore, il existe aujourd'hui un large support de navigateur pour l'API d'internationalisation .
Cela peut également être fait si vous utilisez le kendo.
kendo.toString(dateobject, "MMMM");
Voici la liste des formateurs du site de kendo :
"d" Rend le jour du mois, de 1 à 31.
"dd" Le jour du mois, du 01 au 31.
"ddd" Le nom abrégé du jour de la semaine.
"dddd" Le nom complet du jour de la semaine.
"f" Les dixièmes de seconde dans une valeur de date et d'heure.
"ff" Les centièmes de seconde dans une valeur de date et d'heure.
"fff" Les millisecondes dans une valeur de date et d'heure.
"M" Le mois, de 1 à 12.
"MM" Le mois, de 01 à 12.
"MMM" Le nom abrégé du mois.
"MMMM" Le nom complet du mois.
"h" L'heure, en utilisant une horloge de 12 heures de 1 à 12.
"hh" L'heure, en utilisant une horloge de 12 heures de 01 à 12.
"H" L'heure, en utilisant une horloge de 24 heures de 1 à 23.
"HH" L'heure, en utilisant une horloge de 24 heures de 01 à 23.
"m" La minute, de 0 à 59.
"mm" La minute, de 00 à 59.
"s" Le second, 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" L'année pleine valeur.
"zzz" Le fuseau horaire local lors de l'utilisation de formats pour analyser les chaînes de date UTC.
Vous pouvez simplement utiliser Date.toLocaleDateString () et analyser la date souhaitée comme paramètre
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'}));
Vous pouvez trouver plus d'informations dans la documentation de Firefox
Si vous ne souhaitez pas utiliser le moment et souhaitez 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;
}
};
}
Pour moi, c'est la meilleure solution,
pour TypeScript également
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"]
Stockez les noms dans un tableau et recherchez 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()]);
var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
? Bien plus court que de les ajouter individuellement ...
J'ai une solution partielle que j'ai trouvée. 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(","));
}
En étendant simplement les nombreuses autres excellentes réponses - si vous utilisez jQuery - vous pouvez simplement 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 au var d = new Date(somevalue)
. Le principal avantage de ceci est par @nickf dit d'éviter le namespace global.
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 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 hack rapide que j'ai utilisé et 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);