首页 文章

从日期获取月份名称

提问于
浏览
521

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

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

30 回答

  • 3

    如果你're using jQuery, you'可能也使用jQuery UI,这意味着你可以使用$.datepicker.formatDate() .

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

    要在不输入日期的情况下获取当前月份,请使用以下代码:

    var dateToday = new Date();
    var locale = "en-us";
    var month = dateToday.toLocaleString(locale, {month: "long"});
    alert(month);
    
  • 5

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

  • 157

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

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

    kendo.toString(dateobject, "MMMM");
    

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

    “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”这一年的全部 Value . “zzz”使用格式解析UTC日期字符串时的本地时区 .

  • 2

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

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

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

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

    .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

    我衷心地推荐format库中的format函数,您可以像这样使用它:

    moment().format("MMM");  // "April" - 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 .

  • 53

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

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

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

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

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

    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

  • 5

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

    If you need a whole array:

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

    Usage:

    console.log(monthsLocalizedArray('en')); // -> ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
    console.log(monthsLocalizedArray('bg')); // -> ["януари", "февруари", "март", "април", "май", "юни", "юли", "август", "септември", "октомври", "ноември", "декември"]
    

    If you need only a selected month (faster):

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

    Usage:

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

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

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

    更短的版本:

    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()]);
    
  • 0
    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();
    
  • 3

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

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

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

  • 919

    尝试:

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

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

    您可以使用几种可用的日期格式器之一 . 由于这属于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/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date还有更多内容

  • 1

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

    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

  • 2

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

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

    要获取月份名称数组:

    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/

  • 10

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

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

    http://jsfiddle.net/dstorey/Xgerq/

    “long”使用月份的全名,“short”表示短名称,“narrow”表示更小的版本,例如字母表中的第一个字母 .

    您可以将语言环境更改为任何您喜欢的语言环境,并使用正确的名称语言/国家 .

    使用 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);
      
    } else {
      console.log('Intl.DateTimeFormat not supported');
    }
    

    这个API的主要问题是它是新的 . 它仅适用于Blink浏览器(Chrome和Opera),IE11,Microsoft Edge,Firefox 29和Safari 10

    有关更多信息,请参阅我在Internationalization API上的博客文章 .

  • 2

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

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

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

  • 7

    使用这个配偶

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

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

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

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

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

  • 0

    let date = new Date() let formatted = date.toLocaleDateString("en-GB", { month: "long", year: "numeric" }) console.log($) => 2018年11月

    更多here

相关问题