从日期获取月份名称

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

var objDate = new Date("10/11/2009");

#1楼

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

#2楼

我想出了部分解决方案。 它使用正则表达式提取月份和日期名称。 但是,当我查看“区域和语言”选项(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(","));
    }

#3楼

只是扩展许多其他出色的答案-如果您使用的是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所说的主要优点是避免全局名称空间。


#4楼

我衷心推荐来自moment.js库的format函数,您可以像这样使用它:

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”

除了冗长的其他功能列表,它还对国际化提供了强大的支持


#5楼

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

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


#6楼

较短的版本:

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


#7楼

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


#8楼

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

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

#9楼

您可以使用datejs来做到这一点。 检查FormatSpecifiers ,MMMM为您提供月份的名称:

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

datejs可以将其本地化为150多个语言环境! 看这里


#10楼

如果您使用的是jQuery,则可能还使用了jQuery UI,这意味着您可以使用$ .datepicker.formatDate()

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

#11楼

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

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

例如

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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date中有更多内容


#12楼

现在可以使用ECMAScript国际化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的博客文章。


#13楼

要获取月份名称数组:

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

http://jsfiddle.net/polinux/qb346/


#14楼

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

如果需要整个数组:

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上,需要进行一些修改,因为它可以返回整个日期。


#15楼

不幸的是,提取月份名称的最佳方法是从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'

#16楼

如果您不想使用外部库或存储月份名称数组,或者由于浏览器兼容而导致ECMAScript国际化API不够好,那么您始终可以通过从日期输出:

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

这将为您提供缩写的月份名称,例如,十月。我相信日期会以各种格式出现,具体取决于初始化和您的语言环境,因此请查看toDateString()返回的内容并根据该值重新计算您的substring()值。


#17楼

我的最佳解决方案如下:

       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;

#18楼

目前的自然格式是使用Moment.js。

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

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

#19楼

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

 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


#20楼

对于momentjs ,只需使用格式符号即可。

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

#21楼

除了声明包含所有月份名称的数组然后再指向索引之外,我们还可以将其编写为较短的版本,如下所示:

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

#22楼

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

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

#23楼

尝试:

var objDate = new Date("10/11/2009");

var strDate =
    objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
    objDate.toLocaleString("en", { month: "long"  }) + ' ' +
    objDate.toLocaleString("en", { year: "numeric"});

#24楼

如果您正在使用剑道,也可以这样做。

kendo.toString(dateobject, "MMMM");

以下是Kendo网站上的格式化程序列表:

“ d”渲染从1到31的月份。

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

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

“ dddd”星期几的全名。

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

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

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

“ M”月,从1到12。

“ MM”月份,从01到12。

“ MMM”月份的缩写名称。

“ MMMM”月的全名。

“ h”小时,使用1到12之间的12小时制。

“ hh”小时,使用从12到12的时钟(从01到12)。

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

“ HH”小时,使用24小时制,从01到23。

“ m”分钟,从0到59。

“ mm”分钟,从00到59。

“ s”秒,从0到59。

“ ss”秒,从00到59。

“ tt” AM / PM指示符。

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

“ yyyy”年的全部值。

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


#25楼

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


#26楼

我使用的一个快速技巧很有效:

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


#27楼

格式化日期的另一种方法

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

#28楼

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

也适用于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"]

#29楼

把事情简单化:

echo date("d M Y");

这将给

31 Aug 2019
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值