Wie kann ich den Namen des Monats (z. B. Oktober/Oktober) aus diesem Datumsobjekt in JavaScript generieren?
var objDate = new Date("10/11/2009");
Kürzere Version:
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()]);
Dies ist jetzt mit der ECMAScript Internationalization API möglich:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('en-us', { month: 'long' });
console.log(month);
long
verwendet den vollständigen Namen des Monats, short
für den Kurznamen und narrow
für eine minimalere Version, z. B. den ersten Buchstaben in alphabetischen Sprachen.
Sie können das Gebietsschema von en-us
in ein beliebiges Gebiet ändern, das den gewünschten Namen für diese Sprache/dieses Land verwendet.
Mit toLocaleString
müssen Sie jedes Mal das Gebietsschema und die Optionen übergeben. Wenn Sie dieselben Gebietsschema-Informationen und Formatierungsoptionen für mehrere verschiedene Datumsangaben verwenden, können Sie stattdessen Intl.DateTimeFormat
verwenden:
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');
}
Das Hauptproblem bei dieser API ist, dass es neu ist. Es ist nur in Blink-Browsern (Chrome und Opera), IE11, Microsoft Edge, Firefox 29+ und Safari 10+ verfügbar
Weitere Informationen finden Sie in meinem Blogbeitrag in der Internationalization API .
Hier ist noch einer, mit Unterstützung für die Lokalisierung :)
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']
}
};
sie können dann problemlos Unterstützung für andere Sprachen hinzufügen:
Date.locale.fr = {month_names: [...]};
Wenn es Ihnen nichts ausmacht, den Date-Prototyp zu erweitern (und es gibt einige gute Gründe, dies nicht zu tun), können Sie eine sehr einfache Methode finden:
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"
Diese Funktionen gelten dann für all javascript Date-Objekte.
Ich empfehle die Funktion format
aus der moment.js Bibliothek, die Sie wie folgt verwenden können:
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
Neben einer langen Liste weiterer Funktionen verfügt es über eine starke Unterstützung für die Internationalisierung .
Date.prototype.getMonthName = function() {
var monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
return monthNames[this.getMonth()];
}
Es kann als verwendet werden
var month_Name = new Date().getMonthName();
Sie könnten dazu datejs verwenden. Überprüfen Sie die FormatSpecifiers , und MMMM gibt Ihnen den Namen des Monats an:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
Und Datejs hat das Lokalisiert für mehr als 150 Orte! Siehe hier
Hiermit kann ein beliebiger einfacher Prozess ab Datumsobjekt durchgeführt werden.
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()))
Oder Sie können einen Datumsprototyp machen
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
Versuchen:
var objDate = new Date("10/11/2009");
var strDate =
objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
objDate.toLocaleString("en", { month: "long" }) + ' ' +
objDate.toLocaleString("en", { year: "numeric"});
Das natürliche Format dieser Tage ist die Verwendung von Moment.js.
Um den Monat in einem String-Format zu erhalten, ist es in Moment.js sehr einfach, die Monatsnamen in Ihrem Code nicht hart zu codieren: Um den aktuellen Monat und das aktuelle Jahr im Monatsformat und im vollen Jahr abzurufen (Mai 2015 ):
moment(new Date).format("MMMM YYYY");
Hier ist ein Weg, der nicht von einem hartcodierten Array abhängt und mehrere Ländereinstellungen unterstützt.
Wenn Sie ein ganzes Array benötigen:
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;
};
Verwendungszweck:
console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
Wenn Sie nur einen ausgewählten Monat (schneller) benötigen:
var monthLocalizedString = function(month, locale) {
return new Date(2010,month).toLocaleString(locale,{month:"long"});
};
Verwendungszweck:
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
Getestet und funktioniert gut mit Chrome und IE 11. Auf Mozilla sind einige Änderungen erforderlich, da das gesamte Datum zurückgegeben wird.
Anstatt ein Array zu deklarieren, das den gesamten Monatsnamen enthält, und dann mit einem Index zu zeigen, können wir es auch in einer kürzeren Version schreiben:
var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
Leider ist der beste Weg, den Monatsnamen aus der UTCString-Darstellung zu extrahieren:
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'
Sie können eines von mehreren verfügbaren Date-Formatierungsprogrammen verwenden. Da dies unter die JavaScript-Spezifikation fällt, ist es sowohl im Browser- als auch im serverseitigen Modus verfügbar.
objDate.toString().split(" ")[1]; // gives short name, unsure about locale
objDate.toLocaleDateString.split(" ")[0]; // gives long name
z.B.
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
Weitere Informationen finden Sie unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Speichern Sie die Namen in einem Array und suchen Sie nach dem Index des Monats.
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()]);
Wenn Sie jQuery verwenden, verwenden Sie wahrscheinlich auch die jQuery-Benutzeroberfläche. Dies bedeutet, dass Sie $ .datepicker.formatDate () verwenden können.
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
Wenn Sie keinen Moment verwenden möchten und den Monatsnamen anzeigen möchten -
.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;
}
};
}
Wenn Sie keine externe Bibliothek verwenden oder ein Array mit Monatsnamen speichern möchten oder die ECMAScript Internationalization API aufgrund der Browserkompatibilität nicht gut genug ist, können Sie dies immer auf die alte Art tun, indem Sie die Informationen aus dem Datum Ausgabe:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Dies würde Ihnen den abgekürzten Monatsnamen geben, z. Ich glaube, dass das Datum je nach Initialisierung und Ihrem Gebietsschema in allen möglichen Formaten vorliegen wird. Schauen Sie sich also an, was toDateString()
zurückgibt und berechnen Sie Ihre substring()
-Werte basierend darauf.
Dies ist auch möglich, wenn Sie Kendo verwenden.
kendo.toString(dateobject, "MMMM");
Hier sind die Liste der Formatierer von kendo site :
"d" Gibt den Tag des Monats von 1 bis 31 aus.
"dd" Der Tag des Monats von 01 bis 31.
"ddd" Der abgekürzte Name des Wochentags.
"dddd" Der vollständige Name des Wochentags.
"f" Die Zehntelsekunde eines Datums- und Zeitwerts.
"ff" Die Hundertstelsekunde eines Datums- und Zeitwerts.
"fff" Die Millisekunden in einem Datums- und Zeitwert.
"M" Der Monat von 1 bis 12.
"MM" Der Monat von 01 bis 12.
"MMM" Der abgekürzte Name des Monats.
"MMMM" Der vollständige Name des Monats.
"h" Die Stunde mit einer 12-Stunden-Uhr von 1 bis 12 Uhr.
"hh" Die Stunde mit einer 12-Stunden-Uhr von 01 bis 12 Uhr.
"H" Die Stunde im 24-Stunden-Format von 1 bis 23 Uhr.
"HH" Die Stunde im 24-Stunden-Format von 01 bis 23 Uhr.
"m" Die Minute von 0 bis 59.
"mm" Die Minute von 00 bis 59.
"s" Die Sekunde von 0 bis 59.
"ss" Der zweite von 00 bis 59.
"tt" Der AM/PM-Bezeichner.
"yy" Die letzten beiden Zeichen des Jahreswerts.
"yyyy" Der Jahreswert.
"zzz" Die lokale Zeitzone, wenn Formate zum Parsen von UTC-Datumszeichenfolgen verwendet werden.
Meine beste Lösung ist wie folgt:
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]
}
Ich habe eine Teillösung, die ich mir ausgedacht habe. Es verwendet einen regulären Ausdruck, um den Namen des Monats und des Tages zu extrahieren. Beim Durchsehen der Regions- und Sprachoptionen (Windows) stelle ich jedoch fest, dass unterschiedliche Kulturen unterschiedliche Formatreihenfolgen haben. Vielleicht könnte ein besseres Muster für reguläre Ausdrücke hilfreich sein.
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(","));
}
Eine andere Möglichkeit, das Datum zu formatieren
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Ein kurzer Hack, den ich verwendet habe, der gut funktioniert:
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);
Für mich ist dies die beste Lösung,
auch für 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;
};
Ausgabe ist
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
Um ein Array von Monatsnamen zu erhalten:
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
Schreibe einfach einen einfachen Wrapper um 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));
Verwenden Sie diesen Kumpel
function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}
Erweitern Sie einfach die vielen anderen hervorragenden Antworten - wenn Sie jQuery verwenden - können Sie einfach so etwas tun
$.fn.getMonthName = function(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
return monthNames[date.getMonth()];
};
dabei ist date
gleich der var d = new Date(somevalue)
. Der Hauptvorteil davon ist, wie Per @nickf gesagt hat, den globalen Namensraum zu vermeiden.