从日期中获取月份名称

1007

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

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

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

7

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

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

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

有moment已经安装了其他用途,这是最简单的解决方案。 - Apps-n-Add-Ons
1
Moment是一个非常庞大的库,对于这个需求来说过于复杂了。现代的替代品包括'Luxon'和'date-fns',不过现在国际化API得到了广泛的浏览器支持。 - Dan Dascalescu

6
你可以尝试这样做:

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

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


6
快速简便
new Date("10/11/2009").toLocaleString("en-US", { month: "long" })
// 'October'

5

你可以选择是否将其翻译成本地语言。

  1. 生成的值为"11 Oct 2009"。

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

  • 使用ECMAScript国际化API将月份翻译成本地语言(例如:11 octobre)
  • 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'
      }))
    }


    5

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

    对于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"]
    

    5

    如果您正在使用kendo,这也是可以完成的。

    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" 以12小时制显示小时数,从1到12。 "hh" 以12小时制显示小时数,从01到12。 "H" 以24小时制显示小时数,从1到23。 "HH" 以24小时制显示小时数,从01到23。 "m" 显示分钟数,从0到59。 "mm" 显示分钟数,从00到59。 "s" 显示秒数,从0到59。 "ss" 显示秒数,从00到59。 "tt" 显示上午/下午标识符。 "yy" 显示年份后两个数字。 "yyyy" 显示完整年份。 "zzz" 当使用格式化程序解析UTC日期字符串时,显示本地时区。

    5

    也可以按照以下方式完成:

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

    这个解决方案不应该被使用。有一种特定的方法可以获取字符串中的月份,其他答案已经指出,不需要直接从日期中提取它。采用这种方法,你不能轻松地在不同语言之间切换。 - rotimi-best

    4

    如果您不想使用外部库或存储月份名称的数组,或者由于浏览器兼容性而ECMAScript国际化API不够好,那么您总可以采用传统方法通过从日期输出中提取信息来完成:

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

    这将为您提供缩写的月份名称,例如 Oct。我相信日期格式会根据初始化和您的语言环境而有所不同,因此请查看 toDateString() 返回的内容,并根据此重新计算您的 substring() 值。


    4
    使用 JavaScript 获取格式为 "dd-MMM-yyyy" 的日期,请使用以下代码:

    const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
        ];
    
        const d = new Date();
        var dd = String(d.getDate()).padStart(2, '0');
        var mm = String(d.getMonth() + 1).padStart(2, '0');
        var yyyy = d.getFullYear();
        var fullDate = +dd +"-"+ monthNames[d.getMonth()] +"-"+ yyyy;
        document.write("The date is : "+ fullDate);


    4

    以下是一个函数,你可以输入1到12的数字,然后返回对应月份的全称,例如'January'或者'July'

        function getMonthName(monthNumber) {
          return new Date('1999-' + monthNumber + '-15').toLocaleString('en-us', { month: 'long' })
        }
    

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