Tarihten ay adı al


Yanıtlar:


1138

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 .


401
hatta sahip biraz sinir bozucu olduğunu 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. :(
zanona

9
Desteklenen her dil için ay adı eklemek gerekiyorsa ideal bir çözüm değildir. Veya String#splitile kullanmanın daha iyi bir yolu olmalı . toStringtoDateString
Ryan

23
çoklu dil = çok boyutlu dizi;) çeviriler ["monthName"] [currentLanguage] [d.getMonth ()]
nuala

25
@ zanona — bir tarih nesnesinin "tüm bunlar dahili olarak tanımlanmış" olmak zorunda değildir. ECMA-262 gerekli olduğu tüm bir olan saat değeri , bir sayıdır. Gördüğünüz , uygulamaya bağlı olan Date.prototype.toString öğesinin sonucudur .
RobG

9
@Devin, ancak diziye her erişmek istediğinizde diziyi yeniden tahsis eder.
Cole Johnson

777

Ş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.

toLocaleStringAPI 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.DateTimeFormatbunun 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 .


1
Safari Teknoloji Önizlemesi'nin bunu desteklediğini onaylayabilirim. Bence kabul edilen cevap olmalı
Salman Hasrat Han

1
Düğümde de çalışıyor!
mikemaccana

4
Harika bir çözüm, ancak kullanım durumum için bu çok yavaş oldu. Birkaç yüz ürün işliyordum ve hem ay hem de yıl (krom, safari) elde etmek için öğe başına ortalama 1 ms idi. Kabul ettiğim cevabı kullandım ama sadece daha iyi performans gösterdiği için. Sadece birkaç kez çağırmam gerekirse bu benim tercih ettiğim yöntem olurdu.
t.888

7
Bu, artık çoğu tarayıcıda desteklenmektedir: caniuse.com/#search=intl
eyal83

2
React Native ile ilgili not, bu iOS cihazlar için çalışıyor, ancak Android'de yanlış görüntüleniyor (sadece tüm zaman damgasını tükürüyor).
Tehlike

162

İş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: [...]};

2
Not bu düğümde çalışmaz olarak 6.x itibariyle Date.localeise undefined. yine de diğer JS uygulamaları için mükemmel bir cevap!
mikemaccana

Yerelleştirilmiş ad dizileri Date.prototype.toLocaleString kullanılarak oluşturulmuşsa bu anlamlı olabilir . Ayrıca, yerleşik prototipleri ve nesneleri genişletmek iyi bir fikir olarak kabul edilmez.
RobG

62

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.


6
"ve bunu yapmak istememek için bazı iyi nedenler var". Sadece merak ettiniz: hangi nedenleri kastediyorsunuz?
KooiInc

13
@Kooilnc: Çünkü esasen küresel alanda çalışıyorsunuz. Bunu yapan başka birinin işlevlerini veya kitaplıklarını içe aktarırsanız, birbirlerinin üzerine yazıyor olabilirler.
nickf

61

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 .


2
İlki "Nis" ile sonuçlanır. Tam adın "MMMM" kullanmasını istiyorsanız "MMM" ayın ilk üç harfini gösterir. Yardım için belgelerine bakın .
Tomnar

Yoğun optimizasyon yoluna gidiyorsanız ve http isteklerini azaltıyorsanız, bu sizin için bir seçenek olmayabilir. Bunun yerine, ay adlarını yalnızca bir kod satırında biçimlendirecekseniz, yalnızca bir ay adı dizisi kullanmaya devam edin.
OzzyTheGiant

3
Moment çok büyük bir kütüphane ve bunun için aşırı derecede abartılı. Modern alternatifler, günümüzde Uluslararasılaştırma API'sı için geniş tarayıcı desteği içerir Luxonve date-fnsyine de geniş bir tarayıcı desteği vardır .
Dan Dascalescu

21
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();

18

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


2
Teşekkürler! Henüz prototipleri anlamıyorum, ama bunu denemeyi dört gözle bekliyorum.
Eric Hepperle - CodeSlayer2010

17

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


12

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"});

Bu 2017 Kışında işe yaradı! Diğer kullanıcılar tarafından 3 yıl kadar önce "en-us" kullanılması Chrome'da çalışmaz.
Eric Hepperle - CodeSlayer2010

9

İş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.


Bu henüz güvenli bir şekilde çalışmaz. NedeniyletoLocaleString
Sergei Panfilov

8

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'

8

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

Not Bu tarayıcılarda güvenilir çalışmıyor lütfen o ... (mobil ve masaüstü) Safari böyle irade çıktı üretir: MAY 1, 2015 AT 12:00:00 AM GMT-4(kullanırken { month: "long" }parametreler)
David M.

1
varsayılan değeri kullanarak da alabilirsiniznew Date().toLocaleString(navigator.language, { month: "short" })
Remo H. Jansen

8

document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))


7

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");

anı başka amaçlar için kurduktan sonra, bu en basit çözümdür.
CFP Desteği

1
Moment çok büyük bir kütüphane ve bunun için aşırı derecede abartılı. Modern alternatifler, günümüzde Uluslararasılaştırma API'sı için geniş tarayıcı desteği içerir Luxonve date-fnsyine de geniş bir tarayıcı desteği vardır .
Dan Dascalescu

7

Tarihi biçimlendirmenin başka bir yolu

new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"

6

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


4

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().



3

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;

benim için oldukça kırılgan görünüyor ... ve OP'nin sorusuna gerçekten cevap vermiyor
David M.

1
Bunu "En İyi Çözümünüz" yapan nedir?
Dan Dascalescu

3

İ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

1
Bu answe zaten 2 kere verilmiş olan yanısıra, momentbir 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 Luxonve date-fnsyine de geniş bir tarayıcı desteği vardır .
Dan Dascalescu

3

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.


3

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


2

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;
      }
    };
  }

2

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"]

1

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()]);

JavaScript getMonth () Yöntemi


22
Neden olmasın var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];? Bunları tek tek eklemekten çok daha kısa ...
Fizzix

1

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(","));
    }

yani, minimal İngilizce ve İspanyolca ile çalışır ... ID's GÜNDÜZ, AY tarihi, yıl FORMAT
Remus

Biraz araştırdım, sanırım UNICODE karakter aralıklarını kullanan düzenli bir ifadeye sahip olmanız için gerçekten dilden bağımsız bir çözüme sahip olacaksınız. Karakter aralıkları farklı alfabe için farklı olurdu, bu yüzden kullanabileceğimiz tüm RegExp'e uyan tek bir boyut olacağını düşünmüyorum.
Remus

0

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 dateeşittir var d = new Date(somevalue). Bunun başlıca avantajı, global ad alanından kaçınmak için söylenen per @nickf.


0

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

http://jsfiddle.net/polinux/qb346/


0

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));


0

İ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);

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.