Dapatkan nama bulan dari Tanggal


Jawaban:


1140

Versi lebih pendek:

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

Catatan (2019-03-08) - Jawaban ini oleh saya yang saya tulis pada tahun 2009 sudah usang. Lihat jawaban David Storey untuk solusi yang lebih baik.


401
Agak frustasi bahwa walaupun memiliki new Date()pengembalian Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)yang jelas berarti objek Date sudah memiliki semua yang didefinisikan secara internal ini (nama bulan dan minggu) itu bukan publik, jadi kita harus mengetikkan semuanya lagi. :(
zanona

9
Bukan solusi yang ideal jika seseorang harus memasukkan nama bulan untuk setiap bahasa yang didukung. Pasti ada cara yang lebih baik menggunakan String#splitdengan toStringatau toDateString.
Ryan

23
multi bahasa = array multi-dimensional;) ​​terjemahan ["monthName"] [currentLanguage] [d.getMonth ()]
nuala

25
@ zanona — objek tanggal tidak harus memiliki "semua ini ditentukan secara internal". Semua yang diperlukan dalam ECMA-262 adalah nilai waktu , yang merupakan angka. Apa yang Anda lihat adalah hasil Date.prototype.toString , yang bergantung pada implementasi.
RobG

9
@Devin tetapi itu mengalokasikan ulang array setiap kali Anda ingin mengaksesnya.
Cole Johnson

777

Sekarang dimungkinkan untuk melakukan ini dengan API Internasionalisasi ECMAScript:

const date = new Date(2009, 10, 10);  // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);

'long' menggunakan nama lengkap bulan ini, 'short' untuk nama pendek, dan 'narrow'untuk versi yang lebih minimal, seperti huruf pertama dalam bahasa alfabet.

Anda dapat mengubah lokal dari browser 'default'menjadi apa pun yang Anda suka (mis'en-us' ), dan itu akan menggunakan nama yang tepat untuk bahasa / negara itu.

Dengan toLocaleStringapi Anda harus lulus di lokasi dan opsi setiap kali. Jika Anda akan menggunakan info lokal dan opsi pemformatan yang sama pada beberapa tanggal yang berbeda, Anda bisa menggunakan Intl.DateTimeFormat:

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

Untuk informasi lebih lanjut lihat posting blog saya di API Internasionalisasi .


1
Saya dapat mengonfirmasi bahwa Pratinjau Teknologi Safari memiliki dukungan untuk ini. Saya pikir harus menjadi jawaban yang diterima
Salman Hasrat Khan

1
Bekerja di simpul juga!
mikemaccana

4
Solusi hebat, tetapi untuk kasus penggunaan saya ini ternyata terlalu lambat. Saya sedang memproses beberapa ratus item dan rata-rata sekitar 1 ms per item untuk mendapatkan bulan dan tahun (chrome, safari). Saya akhirnya menggunakan jawaban yang diterima tetapi hanya karena kinerjanya jauh lebih baik. Ini akan menjadi metode pilihan saya jika saya hanya perlu menyebutnya beberapa kali.
t.888

7
Ini sekarang didukung pada kebanyakan browser: caniuse.com/#search=intl
eyal83

2
Catatan tentang React Native, ini berfungsi untuk perangkat iOS, tetapi pada Android, tampilannya salah (cukup keluarkan seluruh stempel waktu).
hardanger

162

Inilah yang lain, dengan dukungan untuk pelokalan :)

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

Anda kemudian dapat dengan mudah menambahkan dukungan untuk bahasa lain:

Date.locale.fr = {month_names: [...]};

2
Catatan ini tidak akan berfungsi pada node pada 6.x sebagaimana Date.localeadanya undefined. itu adalah jawaban yang sangat baik untuk implementasi JS lainnya!
mikemaccana

Ini mungkin masuk akal jika array nama lokal dibuat menggunakan Date.prototype.toLocaleString . Selain itu, memperluas prototipe dan objek bawaan tidak dianggap sebagai ide yang baik.
RobG

62

Jika Anda tidak keberatan memperpanjang prototipe Tanggal (dan ada beberapa alasan bagus untuk tidak mau melakukan ini), Anda sebenarnya dapat membuat metode yang sangat mudah:

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"

Fungsi-fungsi ini kemudian akan berlaku untuk semua objek Tanggal javascript.


6
"dan ada beberapa alasan bagus untuk tidak mau melakukan ini". Hanya ingin tahu: alasan apa yang Anda maksud?
KooiInc

13
@ Koilnc: Itu karena Anda pada dasarnya bekerja di ruang global. Jika Anda mengimpor fungsi orang lain atau perpustakaan yang juga melakukan ini, maka mereka bisa saling menimpa.
nickf

61

Saya sungguh-sungguh merekomendasikan formatfungsi dari, perpustakaan moment.js , yang dapat Anda gunakan seperti ini:

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

Gunakan "MMMM" sebagai ganti "MMM" jika Anda membutuhkan nama lengkap bulan ini

Selain daftar panjang fitur lainnya, ia memiliki dukungan kuat untuk internasionalisasi .


2
Yang pertama akan menghasilkan "Apr". "MMM" menunjukkan tiga huruf pertama bulan itu, jika Anda ingin nama lengkapnya gunakan "MMMM". Lihat dokumentasi mereka untuk bantuan.
Tomnar

Jika Anda memilih rute optimasi berat dan mengurangi permintaan http, ini mungkin bukan pilihan bagi Anda. Alih-alih, tetap dengan hanya menggunakan array nama bulan jika Anda hanya akan memformat nama bulan dalam satu baris kode.
OzzyTheGiant

3
Momen adalah perpustakaan yang sangat besar, dan cara yang berlebihan untuk ini. Alternatif modern termasuk Luxondan date-fns, tetapi sekali lagi, ada dukungan browser yang luas untuk API Internasionalisasi saat ini .
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()];
}

Dapat digunakan sebagai

var month_Name = new Date().getMonthName();

18

Beberapa proses mudah yang umum dari objek tanggal dapat dilakukan dengan ini.

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

Atau Anda dapat membuat prototipe tanggal seperti

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


2
Terima kasih! Saya belum mengerti prototipe, tapi saya tidak sabar untuk mencobanya.
Eric Hepperle - CodeSlayer2010

17

Anda mungkin menggunakan datejs untuk melakukan itu. Periksa FormatSpecifiers , MMMM memberi Anda nama bulan:

var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));

Dan datej mendapatkan bahwa dilokalkan untuk lebih dari 150 lokal! Lihat disini


12

Mencoba:

var objDate = new Date("10/11/2009");

var strDate =
    objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
    objDate.toLocaleString("en", { month: "long"  }) + ' ' +
    objDate.toLocaleString("en", { year: "numeric"});

Ini berhasil di Musim Dingin 2017! Menggunakan "en-us" seperti yang disarankan oleh pengguna lain 3 tahun sebelumnya tidak berfungsi di Chrome.
Eric Hepperle - CodeSlayer2010

9

Berikut cara yang tidak bergantung pada larik kode keras dan mendukung banyak lokal.

Jika Anda membutuhkan seluruh array:

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

Pemakaian:

console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]

Jika Anda hanya membutuhkan bulan yang dipilih (lebih cepat):

var monthLocalizedString = function(month, locale) {
    return new Date(2010,month).toLocaleString(locale,{month:"long"});
};

Pemakaian:

console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar

Diuji dan berfungsi baik di Chrome dan IE 11. Pada mozilla diperlukan beberapa modifikasi, karena ia mengembalikan seluruh tanggal.


Ini bahkan belum akan bekerja dengan aman. KarenatoLocaleString
Sergei Panfilov

8

Sayangnya cara terbaik untuk mengekstrak nama bulan adalah dari perwakilan 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'

8

Alih-alih mendeklarasikan array yang menyimpan semua nama bulan dan kemudian menunjuk dengan indeks, kita juga dapat menulisnya dalam versi yang lebih pendek seperti di bawah ini:

var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug

harap dicatat bahwa ini tidak berfungsi dengan baik di seluruh browser ... Safari (seluler dan desktop) akan menampilkan sesuatu seperti itu: MAY 1, 2015 AT 12:00:00 AM GMT-4(saat menggunakan { month: "long" }parameter)
David M.

1
Anda juga bisa mendapatkan default menggunakannew Date().toLocaleString(navigator.language, { month: "short" })
Remo H. Jansen

8

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


7

Format alami hari ini adalah menggunakan Moment.js.

Cara mendapatkan bulan dalam format string, sangat sederhana di Moment.js tidak perlu menyulitkan nama bulan dalam kode Anda: Untuk mendapatkan bulan dan tahun saat ini dalam format nama bulan dan tahun penuh (Mei 2015):

  moment(new Date).format("MMMM YYYY");

dengan momen yang sudah diinstal untuk keperluan lain, ini adalah solusi paling sederhana.
Dukungan CFP

1
Momen adalah perpustakaan yang sangat besar, dan cara yang berlebihan untuk ini. Alternatif modern termasuk Luxondan date-fns, tetapi sekali lagi, ada dukungan browser yang luas untuk API Internasionalisasi saat ini .
Dan Dascalescu

7

Cara lain untuk memformat tanggal

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

6

Anda dapat menggunakan salah satu dari beberapa pemformat Tanggal yang tersedia. Karena ini termasuk dalam spesifikasi JavaScript, ini akan tersedia dalam mode sisi browser dan server.

objDate.toString().split(" ")[1]; // gives short name, unsure about locale 
objDate.toLocaleDateString.split(" ")[0]; // gives long name

misalnya

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

Ada lebih banyak di https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


4

Jika Anda tidak ingin menggunakan perpustakaan eksternal, atau menyimpan array nama bulan, atau jika API Internasionalisasi ECMAScript tidak cukup baik karena kompatibilitas browser Anda selalu dapat melakukannya dengan cara lama dengan mengekstraksi info dari tanggal keluaran:

var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);

Ini akan memberi Anda nama bulan yang disingkat, misalnya Oktober. Saya percaya tanggal akan datang dalam semua jenis format tergantung pada inisialisasi dan lokal Anda jadi lihat apa yang toDateString()mengembalikan dan menghitung ulang substring()nilai - nilai Anda berdasarkan itu.


3

Jika Anda menggunakan jQuery, Anda mungkin juga menggunakan jQuery UI, yang berarti Anda dapat menggunakan $ .datepicker.formatDate () .

$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] );   // dutch
$.datepicker.formatDate( "dd MM yy", objDate );

3

Solusi Terbaik saya adalah sebagai berikut:

       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;

tampaknya cukup rapuh bagi saya ... dan itu tidak benar-benar menjawab pertanyaan OP
David M.

1
Apa yang menjadikan ini "Solusi Terbaik" Anda?
Dan Dascalescu


3

Ini juga bisa dilakukan jika Anda menggunakan kendo.

kendo.toString(dateobject, "MMMM");

Berikut daftar pemformat dari situs kendo :

"d" Memberikan tanggal pada bulan itu, dari 1 hingga 31.

"dd" Hari dalam sebulan, dari 01 hingga 31.

"ddd" Nama singkat hari dalam seminggu.

"dddd" Nama lengkap hari dalam seminggu.

"f" Sepersepuluh detik dalam nilai tanggal dan waktu.

"ff" Seratus detik dalam nilai tanggal dan waktu.

"fff" Milidetik dalam nilai tanggal dan waktu.

"M" Bulan ini, dari 1 hingga 12.

"MM" Bulan ini, dari 01 hingga 12.

"MMM" Nama singkat bulan ini.

"MMMM" Nama lengkap bulan ini.

"h" Jamnya, menggunakan jam 12 jam dari 1 hingga 12.

"hh" Jamnya, menggunakan jam 12 jam dari 01 hingga 12.

"H" Jamnya, menggunakan jam 24 jam dari 1 hingga 23.

"HH" Jamnya, menggunakan jam 24 jam dari 01 hingga 23.

"m" Semenit, dari 0 hingga 59.

"mm" Menit, dari 00 hingga 59.

"s" Yang kedua, dari 0 hingga 59.

"ss" Yang kedua, dari 00 hingga 59.

"tt" Penanda AM / PM.

"yy" Dua karakter terakhir dari nilai tahun.

"yyyy" Nilai tahun penuh.

"zzz" Zona waktu lokal saat menggunakan format untuk mem-parsing string tanggal UTC.


3

Anda cukup menggunakan Date.toLocaleDateString () dan menguraikan tanggal yang diinginkan sebagai parameter

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

Anda dapat menemukan informasi lebih lanjut di dokumentasi Firefox


2

Jika Anda tidak ingin menggunakan momen dan ingin menampilkan nama bulan -

.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

Bagi saya ini adalah solusi terbaik adalah,

untuk TypeScript juga

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

Output adalah

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

1

Simpan nama dalam array dan cari berdasarkan indeks bulan ini.

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

Metode JavaScript getMonth ()


22
Mengapa tidak var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];? Jauh lebih pendek daripada menambahkannya satu per satu ...
Fizzix

1

Saya punya solusi parsial yang saya temukan. Ini menggunakan ekspresi reguler untuk mengekstrak nama bulan dan hari. Tetapi ketika saya melihat opsi Wilayah dan Bahasa (Windows) saya menyadari bahwa budaya yang berbeda memiliki urutan format yang berbeda ... mungkin pola ekspresi reguler yang lebih baik dapat berguna.

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

jadi, minimal itu bekerja dengan bahasa Inggris dan Spanyol ... id mencurigai apa pun yang HARI, tanggal BULAN, tahun FORMAT
Remus

Saya telah melihat sedikit, saya pikir untuk memiliki solusi independen bahasa yang benar-benar Anda perlu memiliki ekspresi reguler yang menggunakan rentang karakter UNICODE. Rentang karakter akan berbeda untuk huruf yang berbeda jadi saya tidak berpikir akan ada satu ukuran yang cocok untuk semua RegExp yang bisa kita gunakan.
Remus

0

Hanya memperluas pada banyak jawaban bagus lainnya - jika Anda menggunakan jQuery - Anda bisa melakukan sesuatu seperti

$.fn.getMonthName = function(date) {

    var monthNames = [
    "January", "February", "March",
    "April", "May", "June",
    "July", "August", "September",
    "October", "November", "December"
    ];

    return monthNames[date.getMonth()];

};

dimana datesama dengan var d = new Date(somevalue). Keuntungan utama dari ini adalah per @nickf mengatakan tentang menghindari namespace global.


0

Untuk mendapatkan berbagai nama bulan:

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

Cukup tulis pembungkus sederhana di sekitar 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

Retas cepat yang saya gunakan yang berfungsi dengan baik:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.