Risposte:
Versione più 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 (08-03-2019) - Questa mia risposta, che ho scritto originariamente nel 2009, è obsoleta. Vedi la risposta di David Storey per una soluzione migliore.
new Date()
tornatoTue Sep 06 2011 20:02:25 GMT+0200 (CEST)
che significhi chiaramente che l'oggetto Date abbia già tutto questo internamente definito (nomi dei giorni del mese e della settimana) non sia pubblico, quindi dobbiamo digitare di nuovo tutto. :(
String#split
con toString
o toDateString
.
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 una versione più minimale, come la prima lettera in lingue alfabetiche.
Puoi modificare le impostazioni internazionali dal browser 'default'
a quelle che ti piacciono (ad esempio 'en-us'
) e utilizzerà il nome corretto per quella 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 Intl.DateTimeFormat
invece utilizzare :
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 sull'API per l' 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: [...]};
Date.locale
è undefined
. è una risposta eccellente per altre implementazioni JS!
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 format
funzione dalla libreria moment.js , che puoi usare 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
Utilizzare "MMMM" anziché "MMM" se è necessario il nome completo del mese
Oltre a un lungo elenco di altre funzionalità, ha un forte supporto per l'internazionalizzazione .
Luxon
e date-fns
, ancora una volta, al giorno d'oggi esiste un ampio supporto browser per l'API di 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();
In questo modo è possibile eseguire alcuni semplici processi comuni dall'oggetto data.
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 simile
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
Per farlo potresti usare datejs . Controlla il 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 più di 150 locali! Vedere qui
Provare:
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;
};
Uso:
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"});
};
Uso:
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
Testato e funziona bene su Chrome e IE 11. Su mozilla sono necessarie alcune modifiche, perché restituisce l'intera data.
toLocaleString
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'
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
MAY 1, 2015 AT 12:00:00 AM GMT-4
(quando si utilizzano i { month: "long" }
parametri)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
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 nel formato del nome del mese e per l'intero anno (maggio 2015):
moment(new Date).format("MMMM YYYY");
Luxon
e date-fns
, ancora una volta, al giorno d'oggi esiste un ampio supporto browser per l'API di internazionalizzazione .
Un altro modo per formattare la data
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
È possibile utilizzare uno dei numerosi formati di data 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 esempio
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
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 le informazioni dal uscita data:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Questo ti darebbe il nome del mese abbreviato, ad esempio ottobre. Credo che la data arriverà in tutti i tipi di formati a seconda dell'inizializzazione e delle impostazioni locali, quindi dai un'occhiata a ciò che toDateString()
ritorna e ricalcola i tuoi substring()
valori in base a quello.
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 );
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;
Con momentjs , basta usare la notazione di formato .
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
è una libreria molto grande, e decisamente eccessiva per questo. Le moderne alternative includono Luxon
e date-fns
, ancora una volta, al giorno d'oggi esiste un ampio supporto browser per l'API di internazionalizzazione .
Questo può essere fatto anche se stai usando il kendo.
kendo.toString(dateobject, "MMMM");
Ecco un elenco di formattatori dal sito di kendo :
"d" Esegue il rendering del giorno del mese, da 1 a 31.
"dd" Il giorno del mese, da 01 a 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, da 1 a 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 a 12 ore da 1 a 12.
"hh" L'ora, utilizzando un orologio a 12 ore da 01 a 12.
"H" L'ora, utilizzando un orologio di 24 ore da 1 a 23.
"HH" L'ora, utilizzando un orologio di 24 ore da 01 a 23.
"m" Il minuto, da 0 a 59.
"mm" Il minuto, da 00 a 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.
"yyyy" L'anno valore pieno.
"zzz" Il fuso orario locale quando si utilizzano i formati per analizzare le stringhe di date UTC.
Puoi semplicemente usare Date.toLocaleDateString () e analizzare la data desiderata come parametro
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'}));
Puoi trovare maggiori informazioni nella documentazione di Firefox
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;
}
};
}
Per me questa è la soluzione migliore è,
anche per TypeScript
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;
};
L'output è
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
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()]);
var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
? Molto più breve dell'aggiunta individuale ...
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(","));
}
Basta estendere le molte altre risposte eccellenti - se si utilizza jQuery - si potrebbe 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 al var d = new Date(somevalue)
. Il vantaggio principale di questo è per @nickf detto di evitare lo spazio dei nomi globale.
Per ottenere una matrice di nome 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
Basta scrivere un semplice wrapper in giro 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));
Ho usato un trucco rapido 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);