Làm cách nào tôi có thể tạo tên của tháng (ví dụ: Tháng 10 / Tháng 10) từ đối tượng ngày này trong JavaScript?
var objDate = new Date("10/11/2009");
Làm cách nào tôi có thể tạo tên của tháng (ví dụ: Tháng 10 / Tháng 10) từ đối tượng ngày này trong JavaScript?
var objDate = new Date("10/11/2009");
Câu trả lời:
Phiên bản ngắn hơn:
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()]);
Lưu ý (2019-03-08) - Câu trả lời này của tôi mà tôi đã viết ban đầu vào năm 2009 đã lỗi thời. Xem câu trả lời của David Store cho một giải pháp tốt hơn.
new Date()
quay trở lại Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)
, điều đó có nghĩa rõ ràng là đối tượng Ngày đã có tất cả điều này được xác định bên trong (tên ngày và tháng trong tuần), nó không được công khai, vì vậy chúng ta phải nhập lại tất cả. :(
String#split
với toString
hoặc toDateString
.
Bây giờ có thể làm điều này với API quốc tế hóa ECMAScript:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);
'long'
sử dụng tên đầy đủ của tháng, 'short'
cho tên ngắn và 'narrow'
cho phiên bản tối thiểu hơn, chẳng hạn như chữ cái đầu tiên trong các ngôn ngữ bảng chữ cái.
Bạn có thể thay đổi ngôn ngữ từ trình duyệt 'default'
thành bất kỳ ngôn ngữ nào bạn muốn (ví dụ 'en-us'
) và nó sẽ sử dụng đúng tên cho ngôn ngữ / quốc gia đó.
Với toLocaleString
api, bạn phải vượt qua miền địa phương và các tùy chọn mỗi lần. Nếu bạn định sử dụng cùng một thông tin định dạng và tùy chọn định dạng vào nhiều ngày khác nhau, bạn có thể sử dụng Intl.DateTimeFormat
thay thế:
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".
Để biết thêm thông tin, hãy xem bài đăng trên blog của tôi về API quốc tế hóa .
Đây là một cái khác, với sự hỗ trợ cho bản địa hóa :)
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']
}
};
sau đó bạn có thể dễ dàng thêm hỗ trợ cho các ngôn ngữ khác:
Date.locale.fr = {month_names: [...]};
Date.locale
là undefined
. đó là một câu trả lời tuyệt vời cho các triển khai JS khác!
Nếu bạn không muốn mở rộng nguyên mẫu Ngày (và có một số lý do chính đáng để không muốn làm điều này), bạn thực sự có thể đưa ra một phương pháp rất dễ dàng:
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"
Các hàm này sau đó sẽ áp dụng cho tất cả các đối tượng Ngày javascript.
Tôi chân thành giới thiệu format
chức năng từ, thư viện khoảnh khắc , mà bạn có thể sử dụng như thế này:
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
Sử dụng "MMMM" thay vì "MMM" nếu bạn cần tên đầy đủ của tháng
Ngoài một danh sách dài các tính năng khác, nó có hỗ trợ mạnh mẽ cho quốc tế hóa .
Luxon
và date-fns
, nhưng sau đó, một lần nữa, có hỗ trợ trình duyệt rộng rãi cho API quốc tế hóa hiện nay .
Date.prototype.getMonthName = function() {
var monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
return monthNames[this.getMonth()];
}
Nó có thể được sử dụng như
var month_Name = new Date().getMonthName();
Một số quy trình dễ dàng phổ biến từ đối tượng ngày có thể được thực hiện bằng cách này.
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()))
Hoặc bạn có thể tạo nguyên mẫu ngày như
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())
Ví dụ:
var dateFormat3 = new Date().getMonthName();
# March
var dateFormat4 = new Date().getFormatDate();
# 16 March, 2017
Bạn có thể sử dụng datejs để làm điều đó. Kiểm tra FormatSpecifier , MMMM cung cấp cho bạn tên của tháng:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
Và datejs đã được bản địa hóa cho hơn 150 địa phương! Xem tại đây
Thử:
var objDate = new Date("10/11/2009");
var strDate =
objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
objDate.toLocaleString("en", { month: "long" }) + ' ' +
objDate.toLocaleString("en", { year: "numeric"});
Đây là một cách không phụ thuộc vào một mảng mã hóa cứng và hỗ trợ nhiều địa phương.
Nếu bạn cần một mảng toàn bộ:
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;
};
Sử dụng:
console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
Nếu bạn chỉ cần một tháng được chọn (nhanh hơn):
var monthLocalizedString = function(month, locale) {
return new Date(2010,month).toLocaleString(locale,{month:"long"});
};
Sử dụng:
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
Đã thử nghiệm và hoạt động tốt trên Chrome và IE 11. Trên mozilla, một số sửa đổi là cần thiết, bởi vì nó trả về toàn bộ ngày.
toLocaleString
Thật không may, cách tốt nhất để trích xuất tên tháng là từ đại diện 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'
Thay vì khai báo mảng chứa tất cả tên tháng và sau đó trỏ bằng một chỉ mục, chúng ta cũng có thể viết nó trong một phiên bản ngắn hơn như dưới đây:
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
(khi sử dụng { month: "long" }
tham số)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
Định dạng tự nhiên ngày nay là sử dụng Moment.js.
Cách lấy tháng theo định dạng chuỗi, rất đơn giản trong Moment.js không cần mã cứng tên tháng trong mã của bạn: Để có được định dạng tên tháng và năm hiện tại và tháng đầy đủ (tháng 5 năm 2015):
moment(new Date).format("MMMM YYYY");
Luxon
và date-fns
, nhưng sau đó, một lần nữa, có hỗ trợ trình duyệt rộng rãi cho API quốc tế hóa hiện nay .
Một cách khác để định dạng ngày
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Bạn có thể sử dụng một trong một số trình định dạng Ngày có sẵn. Vì điều này nằm trong đặc tả JavaScript, nên nó sẽ có sẵn ở cả chế độ phía trình duyệt và phía máy chủ.
objDate.toString().split(" ")[1]; // gives short name, unsure about locale
objDate.toLocaleDateString.split(" ")[0]; // gives long name
ví dụ
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
Có nhiều hơn tại https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Nếu bạn không muốn sử dụng thư viện bên ngoài hoặc lưu trữ một loạt tên tháng hoặc nếu API quốc tế hóa ECMAScript không đủ tốt vì khả năng tương thích trình duyệt, bạn luôn có thể thực hiện theo cách cũ bằng cách trích xuất thông tin từ đầu ra ngày:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Điều này sẽ cung cấp cho bạn tên tháng viết tắt, ví dụ: Tháng Mười. Tôi tin rằng ngày sẽ có đủ loại định dạng tùy thuộc vào khởi tạo và ngôn ngữ của bạn, vì vậy hãy xem những gì toDateString()
trả về và tính toán lại các substring()
giá trị của bạn dựa trên đó.
Nếu bạn đang sử dụng jQuery, có lẽ bạn cũng đang sử dụng Giao diện người dùng jQuery, điều đó có nghĩa là bạn có thể sử dụng $ .datepicker.formatDate () .
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
Giải pháp tốt nhất của tôi là như sau:
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;
Với Momentjs , chỉ cần sử dụng ký hiệu định dạng .
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
là một thư viện rất lớn và quá mức cho việc này. Các lựa chọn thay thế hiện đại bao gồm Luxon
và date-fns
, nhưng sau đó, một lần nữa, có hỗ trợ trình duyệt rộng rãi cho API quốc tế hóa hiện nay .
Điều này cũng có thể được thực hiện nếu bạn đang sử dụng kendo.
kendo.toString(dateobject, "MMMM");
Dưới đây là danh sách các trình định dạng từ trang web kendo :
"D" Hiển thị ngày trong tháng, từ 1 đến 31.
"Dd" Ngày trong tháng, từ 01 đến 31.
"Ddd" Tên viết tắt của ngày trong tuần.
"Dddd" Tên đầy đủ của ngày trong tuần.
"f" Phần mười của một giây trong giá trị ngày và thời gian.
"ff" Một phần trăm giây trong giá trị ngày và thời gian.
"fff" Các mili giây trong một giá trị ngày và thời gian.
"M" Tháng, từ 1 đến 12.
"MM" Tháng, từ 01 đến 12.
"MMM" Tên viết tắt của tháng.
"MMMM" Tên đầy đủ của tháng.
"H" Giờ, sử dụng đồng hồ 12 giờ từ 1 đến 12.
"hh" Giờ, sử dụng đồng hồ 12 giờ từ 01 đến 12.
"H" Giờ, sử dụng đồng hồ 24 giờ từ 1 đến 23.
"HH" Giờ, sử dụng đồng hồ 24 giờ từ 01 đến 23.
"m" Phút, từ 0 đến 59.
"Mm" Phút, từ 00 đến 59.
"s" Thứ hai, từ 0 đến 59.
"Ss" Thứ hai, từ 00 đến 59.
"tt" Nhà chỉ định AM / PM.
"yy" Hai ký tự cuối cùng từ giá trị năm.
"yyyy" Năm đầy giá trị.
"zzz" Múi giờ địa phương khi sử dụng các định dạng để phân tích chuỗi ngày UTC.
Nếu bạn không muốn sử dụng thời điểm và muốn hiển thị tên tháng -
.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;
}
};
}
Đối với tôi đây là giải pháp tốt nhất là,
cho TypeScript là tốt
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;
};
Đầu ra là
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
Bạn chỉ có thể sử dụng Date.toLocaleDateString () và phân tích ngày muốn làm tham số
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'}));
Bạn có thể tìm thêm thông tin trong tài liệu Firefox
Lưu trữ tên trong một mảng và tra cứu theo chỉ số của tháng.
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" ];
?
Tôi có một giải pháp một phần mà tôi đã đưa ra. Nó sử dụng một biểu thức thông thường để trích xuất tên tháng và ngày. Nhưng khi tôi xem qua các tùy chọn Vùng và Ngôn ngữ (Windows), tôi nhận ra rằng các nền văn hóa khác nhau có thứ tự định dạng khác nhau ... có lẽ một mẫu biểu thức chính quy tốt hơn có thể hữu ích.
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(","));
}
Chỉ cần mở rộng ra nhiều câu trả lời xuất sắc khác - nếu bạn đang sử dụng jQuery - bạn có thể làm một cái gì đó như
$.fn.getMonthName = function(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
return monthNames[date.getMonth()];
};
nơi date
bằng với var d = new Date(somevalue)
. Ưu điểm chính của điều này là per @nickf nói về việc tránh không gian tên toàn cầu.
Để có được một mảng tên tháng:
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
Chỉ cần viết một trình bao bọc đơn giản xung quanh 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));
Một hack nhanh tôi đã sử dụng mà hoạt động tốt:
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);