从日期中获取月份名称

1007

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

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

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

21

可以通过以下方法轻松地从日期对象中提取一些常见的内容。

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(); # 三月

var dateFormat4 = new Date().getFormatDate(); # 2017年3月16日


2
谢谢!我还不理解原型,但我期待着尝试一下。 - Eric Hepperle - CodeSlayer2010

20

另一种格式化日期的方法

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

18

你可以使用datejs来实现。请查看FormatSpecifiers,MMMM会给出月份的名称:

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

而datejs将此本地化为150多个区域设置! 请看这里


16

尝试:

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

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

这在2017年冬季是有效的!使用其他用户3年前建议的“en-us”在Chrome中不起作用。 - Eric Hepperle - CodeSlayer2010

15

不必声明包含所有月份名称的数组,然后使用索引进行指向,我们也可以用以下更简短的方式编写:

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

请注意,这在各种浏览器中的可靠性并不高... Safari(移动和桌面)将会以以下格式输出:MAY 1, 2015 AT 12:00:00 AM GMT-4 (当使用 { month: "long" } 参数时)。 - David M.
1
您也可以使用 new Date().toLocaleString(navigator.language, { month: "short" }) 获取默认值。 - Remo H. Jansen

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


这甚至在Safari中也无法工作。因为 toLocaleString 的缘故。 - S Panfilov

13

最简单和最容易的方法:

const dateStr = new Date(2020, 03, 10).toDateString(); // 'Fri Apr 10 2020'
const dateStrArr = dateStr.split(' '); // ['Fri', 'Apr', '10', '2020']
console.log(dateStrArr[1]); // 'Apr'

  1. 将日期转换为字符串。
  2. 按照空格进行拆分。
  3. 选择数组中的第二个元素。

1
我非常喜欢这个答案。它直截了当。 - Arnold_Sanders

9

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

8

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


7

您可以使用多种可用的日期格式化程序。由于这属于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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date


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