从Date获取月份名称

如何从JavaScript中的此日期对象生成月份的名称(例如:Oct/十月)?

var objDate = new Date("10/11/2009");
1273598 次浏览

将名称存储在数组中并根据月份的索引查找。

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

更短的版本:

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的回答以获得更好的解决方案。

如果您不介意扩展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 Date对象。

这是另一个,支持本地化:)

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

您可以使用datejs来执行此操作。检查格式说明符,MMMM会为您提供月份的名称:

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

datejs已经为150多个语言环境本地化了!看这里

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

我想出了一个部分解决方案。它使用正则表达式来提取月和日名称。但是当我查看区域和语言选项(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-6for (var i = 0; i < 7; i++) {
var day = workingDate.getDay();//-- will eventually be in orderif (days[day] == undefined)days[day] = workingDate.toLocaleDateString().match(RE)[0];workingDate.setDate(workingDate.getDate() + 1);}//--get month names 0-11for (var i = 0; i < 12; i++) {workingDate.setMonth(i);months.push(workingDate.toLocaleDateString().match(RE)[1]);}alert(days.join(",") + " \n\r " + months.join(","));}

只是扩展了许多其他优秀的答案-如果你正在使用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)。这种方法的主要优点是避免了全局命名空间。

我衷心推荐format函数,<强>moment.js库,您可以这样使用:

moment().format("MMM");  // "Apr" - current datemoment(new Date(2012, 01, 04)).format("MMM");  // "Feb" - from a local datemoment.utc(new Date(2012, 00, 04).format("MMM"); // "Jan" - from a UTC date

如果您需要月份的全名,请使用“MMMM”而不是“MMM”

除了冗长的其他功能列表外,它还具有强大的支持国际化

如果你正在使用jQuery,你可能也在使用jQuery UI,这意味着你可以使用$.datepicker.format日期()

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

您可以使用几种可用的日期格式化程序之一。由于这属于JavaScript规范范围,因此它将在浏览器和服务器端模式下可用。

objDate.toString().split(" ")[1]; // gives short name, unsure about localeobjDate.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]Febjs> objDate.toLocaleString().split(" ")[0]February

还有更多的https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

现在可以使用ECMAScript国际化API做到这一点:

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

'long'使用月份的全名,'short'使用月份的短名称,'narrow'使用更小的版本,例如字母语言中的第一个字母。

您可以将浏览器的语言环境'default'更改为任何您喜欢的语言环境(例如'en-us'),并且它将使用该语言/国家/地区的正确名称。

对于toLocaleStringapi,您每次都必须传入语言环境和选项。如果您要在多个不同日期使用相同的语言环境信息和格式选项,您可以使用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".

有关更多信息,请参阅我的博客文章国际化接口

要获取月份名称的数组:

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

这是一种不依赖于硬编码数组并支持多个语言环境的方法。

如果你需要一个完整的数组:

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')); // -> Februaryconsole.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'

如果您不想使用外部库,或存储月份名称数组,或者由于浏览器兼容性而使ECMAScript国际化API不够好,您可以通过从日期输出中提取信息来执行老式方法:

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

这将为您提供缩写的月份名称,例如Oct.我相信日期将以各种格式出现,具体取决于初始化和您的语言环境,因此请查看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;

今天的自然格式是使用Moment.js.

以字符串格式获取月份的方法非常简单Moment.js不需要在代码中硬编码月份名称:以月份名称格式和全年(2015年5月)获取当前月份和年份:

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

日期对象的一些常见的简单过程可以通过这个来完成。

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

对于重大事件,只需使用格式符号。

const myDate = new Date()const shortMonthName = moment(myDate).format('MMM') // Augconst fullMonthName = moment(myDate).format('MMMM') // August

而不是声明包含所有月份名称的数组,然后用索引指向,我们也可以用更短的版本编写它,如下所示:

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

如果您不想使用时刻并想显示月份名称-

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

尝试:

var objDate = new Date("10/11/2009");
var strDate =objDate.toLocaleString("en", { day: "numeric" }) + ' ' +objDate.toLocaleString("en", { month: "long"  }) + ' ' +objDate.toLocaleString("en", { year: "numeric"});

如果您使用的是剑道,也可以这样做。

kendo.toString(dateobject, "MMMM");

以下是来自剑道网站的格式化程序列表:

“d”呈现月份的日期,从1到31。

"dd"月的哪一天,从01到31。

"ddd"星期几的缩写名称。

"dddd"星期几的全称。

"f"日期和时间值中的十分之一秒。

"ff"日期和时间值中的百分之一秒。

"fff"日期和时间值中的毫秒。

“M”月,从1到12。

"MM"月份,从01到12。

"MMM"月份的缩写名称。

"MMMM"月份的全称。

"h"小时,使用从1到12的12小时时钟。

"hh"小时,使用从01到12的12小时时钟。

“H”小时,使用从1到23的24小时制。

"HH"小时,使用从01到23的24小时制时钟。

“m”分钟,从0到59。

"mm"分钟,从00到59。

"s"第二个,从0到59。

"ss"第二个,从00到59。

"tt"AM/PM代号。

"yy"年份值的最后两个字符。

"yyyy"年份的完整值。

"zzz"使用格式解析UTC日期字符串时的本地时区。

只需围绕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);

另一种格式化日期的方法

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

对我来说,这是最好的解决方案,

对于TypeScript也是如此

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

输出是

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

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

最简单的方法:

const dateStr = new Date(2020, 03, 10).toDateString(); // 'Fri Apr 10 2020'const dateStrArr = dateStr.split(' '); // ['Fri', 'Apr', '10', '2020']console.log(dateStrArr[1]); // 'Apr'

  1. 将日期转换为字符串。
  2. 按“空格”拆分。
  3. 选择from数组的第二个元素。

您可以处理或不翻译成当地语言

  1. 生成值为“2009年10月11日”

const objDate = new Date("10/11/2009");const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']if (objDate !== 'Invalid Date' && !isNaN(objDate)) {console.log(objDate.getDate() + ' ' + months[objDate.getMonth()] + ' ' + objDate.getFullYear())}

  1. 用于将月份翻译为本地语言的ECMAScript国际化API(例如:10月11日)

const convertDate = new Date('10/11/2009')const lang = 'fr' // de, es, chif (convertDate !== 'Invalid Date' && !isNaN(convertDate)) {console.log(convertDate.getDate() + ' ' + convertDate.toLocaleString(lang, {month: 'long'}))}

您可以简单地使用Date.toLocaleDateString()并解析所需的日期作为参数

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 monthconsole.log(event.toLocaleDateString(undefined, { month: 'short'}));console.log(event.toLocaleDateString(undefined, { month: 'long'}));

您可以在Firefox留档中找到更多信息

它也可以做到以下几点:

var x = new Date().toString().split(' ')[1];    // "Jul"

在IE 11、Chrome、Firefox上测试

const dt = new Date();const locale = navigator.languages != undefined ? navigator.languages[0] : navigator.language;const fullMonth = dt.toLocaleDateString(locale, {month: 'long'});console.log(fullMonth);

要使用JavaScript将Date格式化为“dd-MMM-yyyy”,请使用以下代码

const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
const d = new Date();var dd = String(d.getDate()).padStart(2, '0');var mm = String(d.getMonth() + 1).padStart(2, '0');var yyyy = d.getFullYear();var fullDate = +dd +"-"+ monthNames[d.getMonth()] +"-"+ yyyy;document.write("The date is : "+ fullDate);

你可以试试这个:

let d = new Date(),t = d.toDateString().split(" ");
console.log(t[2] + " " + t[1] + " " + t[3]);

如果你匆匆忙忙,那么你走吧!

const date = new Date(Date.now());date.toLocaleString('en-US', {month: 'short'}); // {month:'long'}

预期输出:"Apr"

如果我们需要传递输入,那么我们需要使用以下方式

输入:'2020-12-28'

代码:

new Date('2020-12-28').toLocaleString('en-us',{month:'short', year:'numeric'})

输出:“2020年12月”

我是通过DatePipe做的。

const datePipe = new DatePipe(this.locale);datePipe.transform(myDate, 'MMM. y');

你可以像这样在构造函数中注入默认语言环境:

constructor(@Inject(LOCALE_ID) private locale: string){}

来自Angularhttps://angular.io/api/common/DatePipe的参考

这是一个函数,您可以传入1到12,并返回完整的月份名称,例如“一月”或“七月”

    function getMonthName(monthNumber) {return new Date('1999-' + monthNumber + '-15').toLocaleString('en-us', { month: 'long' })}