Wie kann ich aus diesem Datumsobjekt in JavaScript den Namen des Monats (z. B. Oktober / Oktober) generieren?
var objDate = new Date("10/11/2009");
Wie kann ich aus diesem Datumsobjekt in JavaScript den Namen des Monats (z. B. Oktober / Oktober) generieren?
var objDate = new Date("10/11/2009");
Antworten:
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()]);
Hinweis (2019-03-08) - Diese Antwort von mir, die ich ursprünglich 2009 geschrieben habe, ist veraltet. Siehe David Storeys Antwort für eine bessere Lösung.
new Date()
Rückgabe, Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)
was eindeutig bedeutet, dass das Date-Objekt bereits alle diese intern definierten (Monats- und Wochentagsnamen) hat, nicht öffentlich ist, sodass wir alles erneut eingeben müssen. :(
String#split
mit toString
oder zu arbeiten toDateString
.
Dies ist jetzt mit der ECMAScript Internationalization API möglich:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);
'long'
Verwendet den vollständigen Namen des Monats, 'short'
den Kurznamen und 'narrow'
eine minimalere Version, z. B. den ersten Buchstaben in alphabetischen Sprachen.
Sie können das Gebietsschema von Browsern 'default'
nach 'en-us'
Belieben ändern (z. B. ) und es wird der richtige Name für diese Sprache / dieses Land verwendet.
Mit toLocaleString
API müssen Sie jedes Mal das Gebietsschema und die Optionen übergeben. Wenn Sie an mehreren verschiedenen Daten dieselben Gebietsschemainformationen und Formatierungsoptionen verwenden möchten, können Sie Intl.DateTimeFormat
stattdessen Folgendes verwenden:
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".
Weitere Informationen finden Sie in meinem Blogbeitrag zur Internationalisierungs-API .
Hier ist noch eine 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 ganz einfach Unterstützung für andere Sprachen hinzufügen:
Date.locale.fr = {month_names: [...]};
Date.locale
ist undefined
. Es ist jedoch eine hervorragende Antwort für andere JS-Implementierungen!
Wenn es Ihnen nichts ausmacht, den Date-Prototyp zu erweitern (und es gibt einige gute Gründe, dies nicht zu tun), können Sie tatsächlich 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 alle Javascript-Datumsobjekte.
Ich empfehle die format
Funktion aus der Bibliothek moment.js , die Sie folgendermaßen verwenden können:
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
Verwenden Sie "MMMM" anstelle von "MMM", wenn Sie den vollständigen Namen des Monats benötigen
Neben einer langen Liste weiterer Funktionen wird die Internationalisierung nachdrücklich unterstützt .
Luxon
und date-fns
, aber dann wieder gibt es breite Browser - Unterstützung für die Internationalisierung API heute .
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();
Auf diese Weise kann ein üblicher einfacher Prozess ab Datumsobjekt ausgefü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 Datum Prototyp wie 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
Sie können dazu datejs verwenden. Überprüfen Sie die FormatSpecifiers . MMMM gibt Ihnen den Namen des Monats:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
Und Datejs haben das für mehr als 150 Locales lokalisiert! Siehe hier
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"});
Hier ist ein Weg, der nicht von einem fest codierten Array abhängt und mehrere Gebietsschemas 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 benötigen (schneller):
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 einwandfrei unter Chrome und IE 11. Unter Mozilla sind einige Änderungen erforderlich, da das gesamte Datum zurückgegeben wird.
toLocaleString
Leider ist der beste Weg, den Monatsnamen zu extrahieren, die UTCString-Darstellung:
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'
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 wie folgt schreiben:
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
(bei Verwendung von { month: "long" }
Parametern)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
Das natürliche Format dieser Tage ist die Verwendung von Moment.js.
Die Möglichkeit, den Monat in einem Zeichenfolgenformat abzurufen, ist in Moment.js sehr einfach. Sie müssen die Monatsnamen in Ihrem Code nicht fest codieren: So erhalten Sie den aktuellen Monat und das aktuelle Jahr im Monatsnamenformat und im gesamten Jahr (Mai 2015):
moment(new Date).format("MMMM YYYY");
Luxon
und date-fns
, aber dann wieder gibt es breite Browser - Unterstützung für die Internationalisierung API heute .
Eine andere Möglichkeit, das Datum zu formatieren
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Sie können einen von mehreren verfügbaren Datumsformatierern verwenden. Da dies unter die JavaScript-Spezifikation fällt, wird es sowohl im browser- als auch im serverseitigen Modus verfügbar sein.
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
Wenn Sie keine externe Bibliothek verwenden oder ein Array von Monatsnamen speichern möchten oder wenn die ECMAScript Internationalization API aufgrund der Browserkompatibilität nicht gut genug ist, können Sie dies immer auf die altmodische Weise tun, indem Sie die Informationen aus dem extrahieren Datumsausgabe:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Dies würde Ihnen den abgekürzten Monatsnamen geben, z. B. Okt. Ich glaube, das Datum wird abhängig von der Initialisierung und Ihrem Gebietsschema in allen möglichen Formaten vorliegen. Sehen Sie sich also an, was toDateString()
zurückgibt, und berechnen Sie Ihre substring()
Werte basierend darauf neu.
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 );
Meine beste Lösung lautet 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;
Mit momentjs , benutzen Sie einfach die Format - Notation.
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
gibt es eine sehr große Bibliothek, und viel zu viel dafür. Moderne Alternativen umfassen Luxon
und date-fns
, aber dann wieder gibt es breite Browser - Unterstützung für die Internationalisierung API heute .
Dies kann auch durchgeführt werden, wenn Sie Kendo verwenden.
kendo.toString(dateobject, "MMMM");
Hier ist eine Liste der Formatierer von der Kendo-Site :
"d" Gibt den Tag des Monats von 1 bis 31 an.
"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 in einem Datums- und Zeitwert.
"ff" Die Hundertstelsekunde in einem Datums- und Zeitwert.
"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 im 12-Stunden-Format von 1 bis 12.
"hh" Die Stunde mit einer 12-Stunden-Uhr von 01 bis 12.
"H" Die Stunde im 24-Stunden-Format von 1 bis 23.
"HH" Die Stunde im 24-Stunden-Takt von 01 bis 23.
"m" Die Minute von 0 bis 59.
"mm" Die Minute von 00 bis 59.
"s" Die zweite von 0 bis 59.
"ss" Die zweite von 00 bis 59.
"tt" Der AM / PM-Bezeichner.
"yy" Die letzten beiden Zeichen aus dem Jahreswert.
"JJJJ" Der volle Wert des Jahres.
"zzz" Die lokale Zeitzone bei Verwendung von Formaten zum Parsen von UTC-Datumszeichenfolgen.
Wenn Sie moment nicht verwenden 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;
}
};
}
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"]
Sie können einfach das Date.toLocaleDateString () verwenden und das gewünschte Datum als Parameter analysieren
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'}));
Weitere Informationen finden Sie in der Firefox- Dokumentation
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()]);
var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
? Weit kürzer als sie einzeln hinzuzufügen ...
Ich habe eine Teillösung, die ich mir ausgedacht habe. Es wird ein regulärer Ausdruck verwendet, um den Monats- und Tagesnamen zu extrahieren. Beim Durchsehen der Optionen für Region und Sprache (Windows) stelle ich jedoch fest, dass verschiedene 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(","));
}
Wenn Sie nur 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()];
};
wo date
ist gleich dem var d = new Date(somevalue)
. Der Hauptvorteil davon ist laut @nickf die Vermeidung des globalen Namespace.
So erhalten Sie eine Reihe von Monatsnamen:
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
Schreiben Sie einfach einen einfachen Umschlag herum 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));
Ein schneller Hack, den ich verwendet habe und 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);