从日期获取月份名称

问题描述 投票:569回答:29

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

var objDate = new Date("10/11/2009");
javascript date date-format time-format
29个回答
1003
投票

更短的版本:

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's answer以获得更好的解决方案。


8
投票

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

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

# 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')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]

测试并在Chrome和IE 11上正常工作。在Mozilla上需要进行一些修改,因为它返回整个日期。


8
投票

不幸的是,提取月份名称的最佳方法是来自UTCString表示:

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

8
投票

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

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

7
投票

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

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

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'

6
投票

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

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

EG

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

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


3
投票

将名称存储在数组中,然后按月份索引查找。

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


3
投票

如果你正在使用jQuery,你可能也在使用jQuery UI,这意味着你可以使用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() Method

3
投票

如果您不想使用外部库,或存储月份名称数组,或者由于浏览器兼容性而导致ECMAScript国际化API不够好,您可以始终以旧式方式从提取信息中获取信息。日期输出:

$.datepicker.formatDate()

这会给你缩写的月份名称,例如: 10月。我相信日期将以各种格式出现,具体取决于初始化和您的语言环境,因此请查看$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch $.datepicker.formatDate( "dd MM yy", objDate ); 返回的内容,并根据该值重新计算您的var now = new Date(); var monthAbbrvName = now.toDateString().substring(4, 7); 值。


3
投票

我的最佳解决方案如下:

toDateString()

3
投票

使用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; 表示法。

momentjs

585
投票

现在可以使用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'使用更小的版本,例如字母表中的第一个字母。

您可以将浏览器qazxsw poi中的语言环境更改为任何您喜欢的语言环境(例如qazxsw poi),它将使用该语言/国家/地区的正确名称。

使用'default''en-us',您每次都必须传递语言环境和选项。如果您要在多个不同日期使用相同的区域设置信息和格式选项,则可以使用toLocaleString代替:

api

有关更多信息,请参阅我在Intl.DateTimeFormat上的博客文章。


3
投票

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

format

以下是来自const myDate = new Date() const shortMonthName = moment(myDate).format('MMM') // Aug const fullMonthName = moment(myDate).format('MMMM') // August 的格式化程序列表:

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

“dd”月份的日期,从01到31。

“ddd”星期几的缩写名称。

“dddd”星期几的全名。

“f”日期和时间值的十分之一秒。

“ff”日期和时间值的百分之一秒。

“fff”日期和时间值中的毫秒数。

“M”月份,从1到12。

“MM”这个月,从01到12。

“MMM”月份的缩写名称。

“MMMM”月份的全名。

“小时”,从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日期字符串时的本地时区。


2
投票

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

kendo.toString(dateobject, "MMMM");

1
投票

我想出了一个部分解决方案。它使用正则表达式来提取月份和日期名称。但是当我查看区域和语言选项(Windows)时,我意识到不同的文化具有不同的格式顺序......也许更好的正则表达式模式可能是有用的。

kendo site

1
投票
.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;
      }
    };
  }

1
投票

格式化日期的另一种方法

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

0
投票

只是扩展了许多其他优秀的答案 - 如果你使用jQuery - 你可以做类似的事情

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" 等于$.fn.getMonthName = function(date) { var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; return monthNames[date.getMonth()]; }; 。这个的主要优点是@nickf所说的避免全局命名空间。


0
投票

要获取月份名称数组:

date

var d = new Date(somevalue)


0
投票

使用这个伴侣

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

0
投票

只需在http://jsfiddle.net/polinux/qb346/周围写一个简单的包装器:

function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}

0
投票

我使用的快速黑客效果很好:

toLocaleString

158
投票

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

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

然后,您可以轻松添加对其他语言的支持:

Internationalization API

0
投票

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

对于TypeScript也是如此

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

61
投票

如果你不介意扩展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']
    }
};

然后,这些函数将应用于所有javascript Date对象。


57
投票

我衷心地推荐Date.locale.fr = {month_names: [...]}; 库中的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" 函数,您可以像这样使用:

format

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

除了冗长的其他功能列表,它还有强大的moment.js


20
投票
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

它可以用作

support for internationalization

17
投票

您可以使用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(); ,MMMM给你月份的名字:

datejs

而且datejs已经为超过150个语言环境进行了本地化! FormatSpecifiers


16
投票

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

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

或者你可以制作日期原型

例如:

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


12
投票

尝试:

var dateFormat4 = new Date().getFormatDate();
© www.soinside.com 2019 - 2024. All rights reserved.