从日期获取月份名称

时间:2009-10-29 12:19:14

标签: javascript date date-format time-format

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

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

40 个答案:

答案 0 :(得分:975)

更短的版本:

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

答案 1 :(得分:534)

现在可以使用ECMAScript Internationalization API执行此操作:

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

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

您可以将区域设置从en-us更改为您想要的任何区域设置,并使用该语言/国家/地区的正确名称。

使用toLocaleString,您每次都必须传递区域设置和选项。如果您要在多个不同日期使用相同的区域设置信息和格式选项,则可以改为使用Intl.DateTimeFormat

if (typeof Intl == 'object' && typeof Intl.DateTimeFormat == 'function') {
  var formatter = new Intl.DateTimeFormat("fr", {
      month: "short"
    }),
    month1 = formatter.format(new Date()),
    month2 = formatter.format(new Date(2003, 5, 12));

  // current month in French and "juin".
  console.log(month1 + " and " + month2);
  
}

有关详细信息,请参阅Internationalization API上的博文。

答案 2 :(得分:158)

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

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

答案 3 :(得分:61)

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

答案 4 :(得分:56)

我衷心地推荐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”

除了冗长的其他功能列表外,它还具有很强的support for internationalization

答案 5 :(得分:19)

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

答案 6 :(得分:17)

您可以使用datejs来执行此操作。检查FormatSpecifiers,MMMM为您提供月份名称:

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

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

答案 7 :(得分:17)

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

df1 <- structure(list(day = c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 
2L, 2L, 
3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L), value = c(0.1, 0.4, 0.2, 0.5, 
0.3, 0.2, 0.1, 0.3, 0.1, 0.4, 0.2, 0.3, 0.1, 0.3, 0.3, 0.2, 0.2, 
0.2), group = c("A", "A", "A", "A", "A", "A", "B", "B", "B", 
"B", "B", "B", "C", "C", "C", "C", "C", "C"), type = c("X", "Y", 
"X", "Y", "X", "Y", "X", "Y", "X", "Y", "X", "Y", "X", "Y", "X", 
"Y", "X", "Y"), id = c(1L, 1L, 3L, 3L, 5L, 6L, 3L, 3L, 11L, 10L, 
12L, 12L, 12L, 12L, 5L, 5L, 3L, 2L)), .Names = c("day", "value", 
"group", "type", "id"), class = "data.frame", 
row.names = c(NA, -18L))

或者您可以将日期原型设为

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

答案 8 :(得分:16)

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

答案 9 :(得分:11)

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

您可以在Firefox documentation

中找到更多信息。

答案 10 :(得分:11)

尝试:

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

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

答案 11 :(得分:8)

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

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

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

答案 12 :(得分:8)

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

如果您需要整个数组:

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

答案 13 :(得分:7)

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

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

答案 14 :(得分:7)

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

答案 15 :(得分:6)

您可以使用多种可用日期格式器之一。由于这属于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

还有更多内容

答案 16 :(得分:4)

你可以试试这个:

let d = new Date(),
  t = d.toDateString().split(" ");

console.log(t[2] + " " + t[1] + " " + t[3]);

答案 17 :(得分:4)

使用momentjs,只需使用format表示法。

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

答案 18 :(得分:3)

如果您不想使用外部库,或者存储月份名称数组,或者由于浏览器兼容性而导致ECMAScript Internationalization API不够好,您可以通过提取日期输出中的信息:

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

这会给你缩写的月份名称,例如: 10月。我相信日期将以各种格式提供,具体取决于初始化和您的区域设置,因此请查看toDateString()返回的内容,并根据该值重新计算substring()值。

答案 19 :(得分:3)

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

输入:'2020-12-28'

代码:

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

输出:“2020 年 12 月”

答案 20 :(得分:3)

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

答案 21 :(得分:3)

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

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

答案 22 :(得分:3)

我的最佳解决方案如下:

       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;

答案 23 :(得分:3)

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

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

答案 24 :(得分:2)

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

kendo.toString(dateobject, "MMMM");

以下是kendo site的格式化程序列表:

  

&#34; d&#34;呈现月份的日期,从1到31。

     

&#34; DD&#34;每月的某一天,从01到31。

     

&#34; DDD&#34;星期几的缩写名称。

     

&#34; DDDD&#34;一周中某一天的全名。

     

&#34; F&#34;日期和时间值的十分之一秒。

     

&#34; FF&#34;日期和时间值的百分之一秒。

     

&#34; FFF&#34;日期和时间值中的毫秒数。

     

&#34; M&#34;月份,从1到12。

     

&#34; MM&#34;这个月,从01到12。

     

&#34; MMM&#34;月份的缩写名称。

     

&#34; MMMM&#34;这个月的全名。

     

&#34; H&#34;小时,使用1小时至12小时的12小时制。

     

&#34; HH&#34;小时,从01到12使用12小时制。

     

&#34; H&#34;小时,使用从1到23的24小时制。

     

&#34; HH&#34;小时,使用从01到23的24小时制。

     

&#34; M&#34;分钟,从0到59。

     

&#34;毫米&#34;分钟,从00到59.

     

&#34; S&#34;第二,从0到59。

     

&#34; SS&#34;第二个,从00到59.

     

&#34; TT&#34; AM / PM指示符。

     

&#34; YY&#34;年份值中的最后两个字符。

     

&#34; YYYY&#34;全年充值。

     

&#34; ZZZ&#34;使用格式解析UTC日期字符串时的本地时区。

答案 25 :(得分:2)

如果你赶时间......那么你去吧!

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

预期输出:"Apr"

答案 26 :(得分:2)

也可以按照以下步骤进行操作:

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

答案 27 :(得分:2)

您可以翻译或不翻译为本地语言

  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, ch 
if (convertDate !== 'Invalid Date' && !isNaN(convertDate)) {
  console.log(convertDate.getDate() + ' ' + convertDate.toLocaleString(lang, {
    month: 'long'
  }))
}

答案 28 :(得分:2)

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

对于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 :(得分:2)

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

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

答案 30 :(得分:1)

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

答案 31 :(得分:1)

function getMonthName(month) 
{ 
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-1]
}

答案 32 :(得分:0)

只是扩展了许多其他优秀的答案 - 如果您使用的是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所说的避免全局命名空间。

答案 33 :(得分:0)

我想出的最简单最简单的方法。

         var now = new Date();
//basically converting whole date to string = "Fri Apr 2020'
//then splitting by ' ' a space = ['Fri' 'Apr' '2020']
//then selecting second element of array = 
//['Fri' 'Apr' '2020'].[1]
var currentMonth = now.toDateString().split(' ')[1];
console.log(currentMonth);
         

答案 34 :(得分:0)

另一种格式化日期的方式

const productN = await this.getUsername(env,skuName,token);
console.log(productN);

答案 35 :(得分:0)

我使用的快速hack效果很好:

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

答案 36 :(得分:0)

使用此配偶

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

答案 37 :(得分:0)

要使用JavaScript将日期格式设置为“ dd-MMM-yyyy”,请使用以下代码

display

答案 38 :(得分: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

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

答案 39 :(得分:-5)

保持简单:

explain (analyze,buffers,timing) SELECT K_MESSAGE_PRINT_ID, D_PRINT_TIMESTAMP, C_MESSAGE_ID, C_TRANSACTION_ID, C_MESSAGE_PRINT_TYPE, N_MESSAGE_STATE, B_MESSAGE_ACTIVE
, FK_INFRA_OBJECT_ID, FK_FLOW_STEP_ID, FK_NEXT_FLOW_STEP_ID, FK_MESSAGE_CATEGORY, FK_ACK_USER_PROFILE_ID, FK_SERVICE_FORMAT_ID, FK_MESSAGE_PROFILE_ID
, FK_MESSAGE_TYPE_VERSION_ID, FK_MESSAGE_INSTANCE_ID, FK_WORKFLOW_ID, OS_WORKFLOW_ACTION_ID, C_REF_1, C_REF_2, C_REF_3, C_VISIBILITY_CODE
, FK_VISIBILITY_USER_PROFILE_ID, FK_VISIBILITY_GROUP_ID, FK_VISIBILITY_ORGANISATION_ID, C_TAG_INFO
, CASE WHEN CLOB_MESSAGE IS NULL THEN 'no' ELSE 'yes' END AS HAS_CLOB_MESSAGE, CASE WHEN CLOB_PROPRIETARY_MESSAGE IS NULL THEN 'no' ELSE 'yes' END AS HAS_PROPRIETARY_CLOB_MESSAGE
, CASE WHEN CLOB_MESSAGE_ERRORS IS NULL THEN 'no' ELSE 'yes' END AS HAS_CLOB_MESSAGE_ERRORS, CASE WHEN CLOB_STATUS_MSG IS NULL THEN 'no' ELSE 'yes' END AS HAS_CLOB_STATUS_MESSAGE
, C_STATUS_CODE, C_COMMENT, C_TARGET_INFO, N_PROCESSING_STATE, C_LINK_INFO, C_GATE_NAME,C_MESSAGE_SUB_STATE, C_MESSAGE_TYPE, C_MESSAGE_TYPE_2
, C_ORIGINAL_SENDER, C_FINAL_RECEIVER, C_SENDER, C_RECEIVER, C_MESSAGE_ID_2, C_MESSAGE_REF, D_VALUE_DATE, C_AMOUNT, C_AMOUNT_CURR, C_ORGANISATION
, C_ORGANISATION_2, N_AMOUNT_VALUE,C_ATT_21, C_ATT_23, C_ATT_22, C_ATT_24, C_ATT_7, C_ATT_3, C_ATT_11, C_ATT_25, C_ATT_1, C_ATT_19, C_ATT_4
, C_ATT_5, C_ATT_13, C_ATT_9, C_ATT_2, C_ATT_10, C_ATT_20, C_ATT_18, C_ATT_26, C_ATT_15, C_ATT_12, C_ATT_6, C_ATT_8, C_ATT_14, N_ATT_2, N_ATT_4
, N_ATT_13, N_ATT_14, N_ATT_1, N_ATT_6, N_ATT_12, N_ATT_3, N_ATT_11, D_ATT_3, D_ATT_1, D_ATT_2, D_ATT_4, D_ATT_5, D_ATT_6 
FROM IPC_MESSAGE_PRINT 
WHERE N_PROCESSING_STATE = 3 
AND MOD(ASCII(SUBSTR(C_TRANSACTION_ID,1,1)) + ASCII(RIGHT(C_TRANSACTION_ID, 1)),4) = 0  
limit 3000

这将给

echo date("d M Y");