Jak mogę wygenerować nazwę miesiąca (np. Październik / październik) z tego obiektu daty w JavaScript?
var objDate = new Date("10/11/2009");
Jak mogę wygenerować nazwę miesiąca (np. Październik / październik) z tego obiektu daty w JavaScript?
var objDate = new Date("10/11/2009");
Odpowiedzi:
Krótsza wersja:
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()]);
Uwaga (2019-03-08) - Ta odpowiedź, którą pierwotnie napisałem w 2009 roku, jest nieaktualna. Zobacz odpowiedź Davida Storeya na lepsze rozwiązanie.
new Date()
powrót, Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)
co wyraźnie oznacza, że obiekt Date ma już wszystkie te wewnętrznie zdefiniowane (nazwy dni miesiąca i tygodnia), nie jest publiczny, więc musimy to wszystko wpisać ponownie. :(
String#split
z toString
lub toDateString
.
Teraz można to zrobić za pomocą interfejsu API internacjonalizacji ECMAScript:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);
'long'
używa pełnej nazwy miesiąca, 'short'
skrótu i 'narrow'
bardziej minimalnej wersji, takiej jak pierwsza litera w językach alfabetycznych.
Możesz zmienić ustawienia regionalne z przeglądarki na 'default'
dowolne (np. 'en-us'
), A użyje ono właściwej nazwy dla tego języka / kraju.
Za pomocą toLocaleString
interfejsu API musisz za każdym razem podawać ustawienia regionalne i opcje. Jeśli zamierzasz korzystać z tych samych informacji regionalnych i opcji formatowania w wielu różnych datach, możesz Intl.DateTimeFormat
zamiast tego użyć :
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".
Aby uzyskać więcej informacji, zobacz mój post na blogu dotyczący interfejsu API internacjonalizacji .
Oto kolejny, z obsługą lokalizacji :)
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']
}
};
możesz łatwo dodać obsługę innych języków:
Date.locale.fr = {month_names: [...]};
Date.locale
jest undefined
. jest to jednak doskonała odpowiedź na inne implementacje JS!
Jeśli nie masz nic przeciwko rozszerzeniu prototypu Data (i istnieją dobre powody, aby tego nie chcieć), możesz naprawdę wymyślić bardzo łatwą metodę:
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"
Funkcje te zostaną następnie zastosowane do wszystkich obiektów Date javascript.
Polecam serdecznie format
funkcję z biblioteki moment.js , której można użyć w następujący sposób:
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
Użyj „MMMM” zamiast „MMM”, jeśli potrzebujesz pełnej nazwy miesiąca
Oprócz długiej listy innych funkcji, ma silne wsparcie dla internacjonalizacji .
Luxon
i date-fns
, ale potem znowu, istnieje szerokie poparcie dla umiędzynarodowienia przeglądarka API w dzisiejszych czasach .
Date.prototype.getMonthName = function() {
var monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
return monthNames[this.getMonth()];
}
Może być używany jako
var month_Name = new Date().getMonthName();
Dzięki temu można wykonać niektóre typowe proste procesy od daty.
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()))
Lub możesz zrobić prototyp daty
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())
Dawny:
var dateFormat3 = new Date().getMonthName();
# March
var dateFormat4 = new Date().getFormatDate();
# 16 March, 2017
Można użyć datejs to zrobić. Sprawdź Specyfikatory formatu , MMMM podaje nazwę miesiąca:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
I lokalizacje danych zostały zlokalizowane dla ponad 150 lokalizacji! Spójrz tutaj
Próbować:
var objDate = new Date("10/11/2009");
var strDate =
objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
objDate.toLocaleString("en", { month: "long" }) + ' ' +
objDate.toLocaleString("en", { year: "numeric"});
Oto sposób, który nie zależy od tablicy zakodowanej na stałe i obsługuje wiele ustawień narodowych.
Jeśli potrzebujesz całej tablicy:
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;
};
Stosowanie:
console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
Jeśli potrzebujesz tylko wybranego miesiąca (szybciej):
var monthLocalizedString = function(month, locale) {
return new Date(2010,month).toLocaleString(locale,{month:"long"});
};
Stosowanie:
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
Przetestowane i działa dobrze w Chrome i IE 11. Na mozilli potrzebne są pewne modyfikacje, ponieważ zwraca całą datę.
toLocaleString
Niestety najlepszym sposobem na wyodrębnienie nazwy miesiąca jest reprezentacja 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'
Zamiast deklarować tablicę, która zawiera całą nazwę miesiąca, a następnie wskazuje indeks, możemy również napisać ją w krótszej wersji, jak poniżej:
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
(przy użyciu { month: "long" }
parametrów)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
Naturalnym formatem w tych dniach jest użycie Moment.js.
Sposób, aby uzyskać miesiąc w formacie ciągu, jest bardzo prosty w Moment.js, nie trzeba sztywno kodować nazw miesięcy w kodzie: Aby uzyskać bieżący miesiąc i rok w formacie nazwy miesiąca i cały rok (maj 2015):
moment(new Date).format("MMMM YYYY");
Luxon
i date-fns
, ale potem znowu, istnieje szerokie poparcie dla umiędzynarodowienia przeglądarka API w dzisiejszych czasach .
Inny sposób formatowania daty
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Możesz użyć jednego z kilku dostępnych formatów daty. Ponieważ jest to zgodne ze specyfikacją JavaScript, będzie dostępne zarówno w trybie przeglądarki, jak i po stronie serwera.
objDate.toString().split(" ")[1]; // gives short name, unsure about locale
objDate.toLocaleDateString.split(" ")[0]; // gives long name
na przykład
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
Więcej na https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Jeśli nie chcesz korzystać z zewnętrznej biblioteki lub przechowywać tablicy nazw miesięcy, lub jeśli interfejs API internacjonalizacji ECMAScript nie jest wystarczająco dobry z powodu kompatybilności z przeglądarką, zawsze możesz to zrobić w staromodny sposób, wyodrębniając informacje z wyjście daty:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Dałoby to skróconą nazwę miesiąca, np. Październik. Wierzę, że data nadejdzie we wszystkich formatach w zależności od inicjalizacji i ustawień regionalnych, więc spójrz na to, co toDateString()
zwraca, i ponownie oblicz substring()
wartości na tej podstawie.
Jeśli używasz jQuery, prawdopodobnie używasz również jQuery UI, co oznacza, że możesz użyć $ .datepicker.formatDate () .
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
Moje najlepsze rozwiązanie jest następujące:
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;
W chwili , po prostu użyj zapisu formatu .
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
jest to bardzo duża biblioteka i jest do tego zbyt przesadna. Nowoczesne alternatywy obejmują Luxon
i date-fns
, ale potem znowu, istnieje szerokie poparcie dla umiędzynarodowienia przeglądarka API w dzisiejszych czasach .
Można to również zrobić, jeśli używasz kendo.
kendo.toString(dateobject, "MMMM");
Oto lista formatów ze strony kendo :
„d” Renderuje dzień miesiąca, od 1 do 31.
„dd” Dzień miesiąca, od 01 do 31.
„ddd” Skrócona nazwa dnia tygodnia.
„dddd” Pełna nazwa dnia tygodnia.
„f” Dziesiąte sekundy wartości daty i godziny.
„ff” Setne części sekundy w wartości daty i godziny.
„fff” Milisekundy w wartości daty i godziny.
„M” Miesiąc, od 1 do 12.
„MM” Miesiąc, od 01 do 12.
„MMM” Skrócona nazwa miesiąca.
„MMMM” Pełna nazwa miesiąca.
„h” Godzina, przy użyciu zegara 12-godzinnego od 1 do 12.
„hh” Godzina, przy użyciu 12-godzinnego zegara od 01 do 12.
„H” Godzina, przy użyciu 24-godzinnego zegara od 1 do 23.
„GG” Godzina, przy użyciu 24-godzinnego zegara od 01 do 23.
„m” Minuta, od 0 do 59.
„mm” Minuta, od 00 do 59.
„s” Drugi, od 0 do 59.
„ss” drugi, od 00 do 59.
„tt” Oznacznik AM / PM.
„yy” Ostatnie dwa znaki z wartości roku.
„rrrr” Pełna wartość roku.
„zzz” Lokalna strefa czasowa przy użyciu formatów do analizowania ciągów dat UTC.
Możesz po prostu użyć Date.toLocaleDateString () i przeanalizować żądaną datę jako parametr
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'}));
Więcej informacji można znaleźć w dokumentacji Firefoksa
Jeśli nie chcesz użyć chwili i chcesz wyświetlić nazwę miesiąca -
.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;
}
};
}
Dla mnie to najlepsze rozwiązanie to
również dla 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;
};
Dane wyjściowe to
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
Przechowuj nazwy w tablicy i wyszukaj według indeksu miesiąca.
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" ];
? Znacznie krócej niż dodawanie ich pojedynczo ...
Mam częściowe rozwiązanie, które wymyśliłem. Do wyodrębnienia nazwy miesiąca i dnia używa wyrażenia regularnego. Ale kiedy przeglądam opcje Region i język (Windows), zdaję sobie sprawę, że różne kultury mają różną kolejność formatów ... może lepszy może być lepszy wzorzec wyrażeń regularnych.
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(","));
}
Po prostu rozszerzając wiele innych doskonałych odpowiedzi - jeśli używasz jQuery - możesz po prostu zrobić coś takiego
$.fn.getMonthName = function(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
return monthNames[date.getMonth()];
};
gdzie date
jest równe var d = new Date(somevalue)
. Główną zaletą tego jest to, że per @nickf powiedział o unikaniu globalnej przestrzeni nazw.
Aby uzyskać tablicę nazw miesięcy:
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
Wystarczy napisać proste opakowanie 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));
Szybki hack, którego użyłem, który działa dobrze:
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);