Bagaimana saya bisa menghasilkan nama bulan (mis: Oktober / Oktober) dari objek tanggal ini dalam JavaScript?
var objDate = new Date("10/11/2009");
Bagaimana saya bisa menghasilkan nama bulan (mis: Oktober / Oktober) dari objek tanggal ini dalam JavaScript?
var objDate = new Date("10/11/2009");
Jawaban:
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.
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. :(
String#split
dengan toString
atau toDateString
.
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 toLocaleString
api 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 .
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: [...]};
Date.locale
adanya undefined
. itu adalah jawaban yang sangat baik untuk implementasi JS lainnya!
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.
Saya sungguh-sungguh merekomendasikan format
fungsi 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 .
Luxon
dan date-fns
, tetapi sekali lagi, ada dukungan browser yang luas untuk API Internasionalisasi saat ini .
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();
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
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
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"});
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.
toLocaleString
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'
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
MAY 1, 2015 AT 12:00:00 AM GMT-4
(saat menggunakan { month: "long" }
parameter)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
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");
Luxon
dan date-fns
, tetapi sekali lagi, ada dukungan browser yang luas untuk API Internasionalisasi saat ini .
Cara lain untuk memformat tanggal
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
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
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.
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 );
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;
Dengan momentjs , cukup gunakan notasi format .
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
adalah perpustakaan yang sangat besar, dan cara yang berlebihan untuk ini. Alternatif modern termasuk Luxon
dan date-fns
, tetapi sekali lagi, ada dukungan browser yang luas untuk API Internasionalisasi saat ini .
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.
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
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;
}
};
}
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"]
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()]);
var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
? Jauh lebih pendek daripada menambahkannya satu per satu ...
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(","));
}
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 date
sama dengan var d = new Date(somevalue)
. Keuntungan utama dari ini adalah per @nickf mengatakan tentang menghindari namespace global.
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
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));
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);