Yanıtlar:
Kısa versiyon:
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()]);
Not (2019-03-08) - 2009 yılında yazdığım bu cevap modası geçmiş. Daha iyi bir çözüm için David Storey'in cevabına bakınız .
new Date()
dönen Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)
hepimizin tekrar yazmak zorunda bu yüzden, genel değil açıkça zaten Date nesnesini demektir bütün bunlar içten tanımlanan (ay ve gün adları) olan. :(
String#split
ile kullanmanın daha iyi bir yolu olmalı . toString
toDateString
Şimdi bunu ECMAScript Uluslararasılaştırma API'sı ile yapmak mümkün:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);
'long'
ayın tam adını 'short'
, kısa ad 'narrow'
için ve alfabetik dillerdeki ilk harf gibi daha minimal bir sürüm için kullanır.
Yerel ayarı tarayıcıdan değiştirebilirsiniz 'default'
(örneğin 'en-us'
) ve dil / ülke için doğru adı kullanır.
toLocaleString
API ile her seferinde yerel ayarları ve seçenekleri geçmek zorundasınız. Birden fazla farklı tarihte aynı yerel ayar bilgilerini ve biçimlendirme seçeneklerini kullanacaksanız, Intl.DateTimeFormat
bunun yerine şunları kullanabilirsiniz :
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".
Daha fazla bilgi için Internationalization API'sındaki blog gönderime bakın .
İşte yerelleştirme desteği ile bir tane daha :)
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']
}
};
daha sonra diğer diller için kolayca destek ekleyebilirsiniz:
Date.locale.fr = {month_names: [...]};
Date.locale
ise undefined
. yine de diğer JS uygulamaları için mükemmel bir cevap!
Tarih prototipini genişletmenin sakıncası yoksa (ve bunu yapmak istememek için bazı iyi nedenler varsa), aslında çok kolay bir yöntemle karşılaşabilirsiniz:
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"
Bu işlevler daha sonra tüm javascript Date nesnelerine uygulanır.
Yürekten tavsiye format
, gelen işlevi moment.js böyle kullanabilirsiniz kütüphane,:
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
Ayın tam adına ihtiyacınız varsa "MMM" yerine "MMMM" kullanın
Diğer özelliklerin uzun bir listesine ek olarak, uluslararasılaşma için güçlü bir desteğe sahiptir .
Luxon
ve date-fns
yine de geniş bir tarayıcı desteği vardır .
Date.prototype.getMonthName = function() {
var monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
return monthNames[this.getMonth()];
}
Olarak kullanılabilir
var month_Name = new Date().getMonthName();
Tarih nesnesinden bazı yaygın kolay işlemler bu şekilde yapılabilir.
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()))
Ya da tarih prototipi yapabilirsiniz
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())
Ör:
var dateFormat3 = new Date().getMonthName();
# March
var dateFormat4 = new Date().getFormatDate();
# 16 March, 2017
Bunu yapmak için datejs kullanabilirsiniz . FormatSpecifiers'ı kontrol edin , MMMM size ayın adını verir:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
Ve datejs 150'den fazla bölge için yerelleştirilmiş var! Buraya bakın
Deneyin:
var objDate = new Date("10/11/2009");
var strDate =
objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
objDate.toLocaleString("en", { month: "long" }) + ' ' +
objDate.toLocaleString("en", { year: "numeric"});
İşte sabit kodlanmış bir diziye bağlı olmayan ve birden çok yerel ayarı destekleyen bir yol.
Bütün bir diziye ihtiyacınız varsa:
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;
};
Kullanımı:
console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
Yalnızca seçili bir aya ihtiyacınız varsa (daha hızlı):
var monthLocalizedString = function(month, locale) {
return new Date(2010,month).toLocaleString(locale,{month:"long"});
};
Kullanımı:
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
Chrome ve IE 11'de test edildi ve iyi çalışıyor. Mozilla'da, tüm tarihi döndürdüğü için bazı değişiklikler yapılması gerekiyor.
toLocaleString
Maalesef ay adını çıkarmanın en iyi yolu UTCString temsilidir:
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'
Tüm ay adını taşıyan diziyi bildirmek ve ardından bir dizini işaret etmek yerine, dizini aşağıdaki gibi daha kısa bir sürümde de yazabiliriz:
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
(kullanırken { month: "long" }
parametreler)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
Bu günlerde doğal biçim Moment.js kullanmaktır.
Ayı bir dize biçiminde almanın yolu, Moment.js'de çok basittir.
moment(new Date).format("MMMM YYYY");
Luxon
ve date-fns
yine de geniş bir tarayıcı desteği vardır .
Tarihi biçimlendirmenin başka bir yolu
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Kullanılabilir birkaç Tarih biçimlendiricisinden birini kullanabilirsiniz. Bu, JavaScript spesifikasyonuna dahil olduğundan, hem tarayıcı hem de sunucu tarafı modlarında kullanılabilir.
objDate.toString().split(" ")[1]; // gives short name, unsure about locale
objDate.toLocaleDateString.split(" ")[0]; // gives long name
Örneğin
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
Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date adresinde daha fazlası var
Harici bir kütüphane kullanmak veya bir dizi ay adı saklamak istemiyorsanız veya ECMAScript Internationalization API'sı tarayıcı uyumluluğu nedeniyle yeterince iyi değilse, bilgileri her zaman eski yöntemle yapabilirsiniz. tarih çıktısı:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Bu size kısaltılmış ay adını verir, örneğin Ekim. Tarihin başlatmaya ve yerel ayarınıza bağlı olarak her türlü formatta geleceğine inanıyorum, bu nedenle değerlerinize göre toDateString()
geri dönüp yeniden hesaplayın substring()
.
JQuery kullanıyorsanız, muhtemelen jQuery kullanıcı arabirimini de kullanıyorsunuz, yani $ .datepicker.formatDate () kullanabilirsiniz .
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
En İyi Çözümüm aşağıdaki gibidir:
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;
İle momentjs , sadece kullanmak biçim gösterimi.
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
bir olduğunu çok bunun için büyük bir kütüphane, ve yolu overkill. Modern alternatifler, günümüzde Uluslararasılaştırma API'sı için geniş tarayıcı desteği içerir Luxon
ve date-fns
yine de geniş bir tarayıcı desteği vardır .
Bu, kendo kullanıyorsanız da yapılabilir.
kendo.toString(dateobject, "MMMM");
Kendo sitesinden formatlayıcıların listesi :
"d" 1'den 31'e kadar ayın gününü oluşturur.
"gg" 01 ile 31 arasında ayın günü.
"ddd" Haftanın gününün kısaltılmış adı.
"dddd" Haftanın gününün tam adı.
"f" Tarih ve saat değerinde saniyenin onda biri.
"ff" Bir tarih ve saat değerinde saniyenin yüzde biri.
"fff" Bir tarih ve saat değerindeki milisaniye.
"M" 1'den 12'ye kadar olan ay.
"MM" Ay, 01'den 12'ye.
"MMM" Ayın kısaltılmış adı.
"MMMM" Ayın tam adı.
"h" 1 ile 12 arasında 12 saatlik bir saat kullanan saat.
"hh" 01 ile 12 arasında 12 saatlik bir saat kullanan saat.
"H" 1'den 23'e kadar 24 saatlik bir saat kullanan saat.
"HH" 01 ile 23 arasında 24 saatlik bir saat kullanan saat.
"m" Dakika, 0'dan 59'a.
"mm" Dakika, 00'dan 59'a.
"s" İkincisi, 0'dan 59'a.
"ss" İkincisi, 00'dan 59'a.
"tt" AM / PM belirleyicisi.
"yy" Yıl değerinden son iki karakter.
"yyyy" Yıl tam değer.
"zzz" UTC tarih dizelerini ayrıştırmak için formatlar kullanılırken yerel saat dilimi.
Date.toLocaleDateString () yöntemini kullanabilir ve parametre olarak istenen tarihi ayrıştırabilirsiniz
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'}));
Firefox belgelerinde daha fazla bilgi bulabilirsiniz
Anı kullanmak istemiyorsanız ve ay adını görüntülemek istiyorsanız -
.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;
}
};
}
Benim için bu en iyi çözüm,
TypeScript için de
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;
};
Çıktı
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
Adları bir dizide saklayın ve ayın dizinine bakın.
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" ];
? Bunları tek tek eklemekten çok daha kısa ...
Ortaya koyduğum kısmi bir çözümüm var. Ay ve gün adını ayıklamak için normal bir ifade kullanır. Ama Bölge ve Dil seçeneklerine baktığımda (Windows) farklı kültürlerin farklı format düzenine sahip olduklarının farkındayım ... belki daha iyi bir düzenli ifade deseni faydalı olabilir.
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(","));
}
Sadece diğer birçok mükemmel cevabı genişletmek - jQuery kullanıyorsanız - sadece
$.fn.getMonthName = function(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
return monthNames[date.getMonth()];
};
nerede date
eşittir var d = new Date(somevalue)
. Bunun başlıca avantajı, global ad alanından kaçınmak için söylenen per @nickf.
Bir dizi ay adı almak için:
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
Sadece basit bir paketleyici yazın 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));
İyi çalışan hızlı bir kesmek:
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);