从日期中获取月份名称

1007

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

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

8
如果https://dev59.com/znI-5IYBdhLWcg3w18Z3#18648314可以被采纳,将有助于引导未来的读者得到更好的答案。 - Boghyon Hoffmann
41个回答

3

使用 momentjs,只需使用格式化字符串即可。

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

2
除了已经给出两次答案之外,“moment”是一个非常庞大的库,对于这个问题来说过于复杂。现代的替代方案包括“Luxon”和“date-fns”,但是现在国际化API有广泛的浏览器支持。 - Dan Dascalescu

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;

对我来说似乎非常脆弱...而且它并没有真正回答OP的问题。 - David M.
1
这是什么让它成为您的“最佳解决方案”? - Dan Dascalescu

3
如果您正在使用jQuery,那么您可能也在使用jQuery UI,这意味着您可以使用$.datepicker.formatDate()
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] );   // dutch
$.datepicker.formatDate( "dd MM yy", objDate );

2

将名称存储在数组中,并通过月份的索引进行查找。

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


33
为什么不使用 var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 呢?这比逐个添加更短。 - Fizzix

2
如果您不想使用moment并且想要显示月份名称 -
.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
我有一个部分解决方案。它使用正则表达式来提取月份和日期名称。但是,当我查看区域和语言选项(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(","));
    }

所以,最少它可以与英语和西班牙语一起使用... 我怀疑任何格式为DAY、MONTH、date、year的ID。 - Remus
我已经稍微调研了一下,我认为要有一个真正的语言无关解决方案,你需要拥有一个使用UNICODE字符范围的正则表达式。不同字母表的字符范围是不同的,所以我认为我们不能使用一个大小适合所有情况的RegExp。 - Remus

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/


0
我使用的一个快速技巧,效果很好:

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


0
只需编写一个简单的包装器来封装 around 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));


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所说。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接