-
10-07-2019 - |
题
如何在JavaScript中从此日期对象生成月份名称(例如:10月/ 10月)?
var objDate = new Date("10/11/2009");
解决方案
更短的版本:
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()]);
注意(2019-03-08) - 我最初在2009年写的这个答案已经过时了。有关更好的解决方案,请参见 David Storey的回答。
其他提示
现在可以使用ECMAScript Internationalization API执行此操作:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);
'long'
使用月份的全名,'short'
使用短名称,'narrow'
使用更小的版本,例如字母语言的第一个字母。
您可以将浏览器的'default'
中的语言环境更改为您喜欢的任何语言环境(例如'en-us'
),并使用该语言/国家/地区的正确名称。
使用toLocaleString
api 你每次都必须传递语言环境和选项。如果您要在多个不同日期使用相同的区域设置信息和格式选项,则可以使用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".
有关详细信息,请参阅国际化API 上的博文。
这是另一个,支持本地化:)
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']
}
};
然后,您可以轻松添加对其他语言的支持:
Date.locale.fr = {month_names: [...]};
如果你不介意扩展Date原型(并且有一些很好的理由不想这样做),你实际上可以想出一个非常简单的方法:
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"
这些函数将适用于所有 javascript日期对象。
我衷心地推荐 format
来自 moment.js 库,您可以这样使用:
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
使用<!>“MMMM <!>”;而不是<!>“MMM <!>”;如果你需要月份的全名
除了冗长的其他功能列表外,它还具有强大的支持国际化
Date.prototype.getMonthName = function() {
var monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
return monthNames[this.getMonth()];
}
可以用作
var month_Name = new Date().getMonthName();
您可以使用 datejs 来执行此操作。查看 FormatSpecifiers ,MMMM为您提供月份名称:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
而且datejs已经为超过150种语言环境进行了本地化! 请参阅此处
这可以通过日期对象完成一些常见的简单过程。
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()))
或者您可以将日期原型设为
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())
前:
var dateFormat3 = new Date().getMonthName();
# March
var dateFormat4 = new Date().getFormatDate();
# 16 March, 2017
尝试:
var objDate = new Date("10/11/2009");
var strDate =
objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
objDate.toLocaleString("en", { month: "long" }) + ' ' +
objDate.toLocaleString("en", { year: "numeric"});
这是一种不依赖于硬编码数组并支持多种语言环境的方法。
如果您需要整个数组:
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;
};
<强>用法:强>
console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
如果您只需要选定的月份(更快):
var monthLocalizedString = function(month, locale) {
return new Date(2010,month).toLocaleString(locale,{month:"long"});
};
<强>用法:强>
console.log(monthLocalizedString(1, 'en')); // -> February
console.log(monthLocalizedString(1, 'bg')); // -> февруари
console.log(monthLocalizedString(1, 'de')); // -> Februar
在Chrome和IE 11上经过测试并正常运行。在Mozilla上需要进行一些修改,因为它会返回整个日期。
不幸的是,提取月份名称的最佳方法是来自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'
今天的自然格式是使用Moment.js。
以字符串格式获取月份的方法在Moment.js中非常简单,无需在代码中对月份名称进行硬编码: 要获取当月和年份的名称格式和全年(2015年5月):
moment(new Date).format("MMMM YYYY");
我们还可以用更短的版本来编写,而不是声明包含所有月份名称然后用索引指向的数组:
var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
您可以使用多种可用日期格式器之一。由于这属于JavaScript规范,因此它将在浏览器和服务器端模式下可用。
objDate.toString().split(" ")[1]; // gives short name, unsure about locale
objDate.toLocaleDateString.split(" ")[0]; // gives long name
e.g。
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
将名称存储在数组中,然后按月份索引查找。
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()]);
如果你正在使用jQuery,你可能也在使用jQuery UI,这意味着你可以使用 $。 datepicker.formatDate()。
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
如果您不想使用外部库,或者存储月份名称数组,或者由于浏览器兼容性而导致ECMAScript Internationalization API不够好,您可以通过提取日期输出中的信息:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
这会给你缩写的月份名称,例如: 10月。我相信日期将以各种格式出现,具体取决于初始化和您的语言环境,因此请查看toDateString()
返回的内容并根据该值重新计算您的substring()
值。
我的最佳解决方案如下:
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;
如果您不想使用片刻并希望显示月份名称 -
.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;
}
};
}
如果您使用的是剑道,也可以这样做。
kendo.toString(dateobject, "MMMM");
以下是来自剑道网站的格式化程序列表:
QUOT <!>; <!> d QUOT;呈现月份的日期,从1到31。
QUOT <!>; <!> DD QUOT;每月的某一天,从01到31。
<!>QUOT; DDD QUOT <!>;星期几的缩写名称。
QUOT <!>; <!> DDDD QUOT;一周中某一天的全名。
<!>QUOT;˚FQUOT <!>;日期和时间值的十分之一秒。
QUOT <!>; <!> FF QUOT;日期和时间值的百分之一秒。
<!>QUOT; FFF QUOT <!>;日期和时间值中的毫秒数。
<!>QUOT; M QUOT <!>;月份,从1到12。
<!>QUOT; MM QUOT <!>;这个月,从01到12。
<!>QUOT; MMM QUOT <!>;月份的缩写名称。
<!>QUOT; MMMM QUOT <!>;这个月的全名。
<!>QUOT; <!>ħQUOT;小时,使用1小时至12小时的12小时制。
QUOT <!>; <!> HH QUOT;小时,从01到12使用12小时制。
<!>QUOT; H QUOT <!>;小时,使用从1到23的24小时制。
QUOT <!>; <!> HH QUOT;小时,使用从01到23的24小时制。
<!>QUOT; <!>米QUOT;分钟,从0到59。
<!>QUOT;毫米QUOT <!>;分钟,从00到59.
<!>QUOT; S QUOT <!>;第二,从0到59。
<!>QUOT; <!> SS QUOT;第二个,从00到59.
QUOT <!>; <!> TT QUOT; AM / PM指示符。
QUOT <!>; <!> YY QUOT;年份值中的最后两个字符。
QUOT <!>; <!> YYYY QUOT;全年充值。
<!>QUOT; <!> ZZZ QUOT;使用格式解析UTC日期字符串时的本地时区。
我想出了一个部分解决方案。它使用正则表达式来提取月份和日期名称。但是当我查看区域和语言选项(Windows)时,我意识到不同的文化有不同的格式顺序......也许更好的正则表达式模式可能是有用的。
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(","));
}
function getMonthName(month)
{
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-1]
}
格式化日期的另一种方法
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
只是扩展了许多其他优秀的答案 - 如果您使用的是jQuery - 您可以执行类似
的操作$.fn.getMonthName = function(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
return monthNames[date.getMonth()];
};
其中date
等于var d = new Date(somevalue)
。这方面的主要优点是@nickf所说的避免全局命名空间。
获取月份名称数组:
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
使用此配偶
function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}
只需编写一个简单的包装器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));
我使用的快速黑客效果很好:
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);