[javascript] 從日期獲取月份名稱


Answers

現在可以使用ECMAScript Internationalization API執行此操作:

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

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

“long”使用月份的全名,短名稱使用“short”,使用更窄版本的“narrow”,例如字母語言中的第一個字母。

您可以將語言環境更改為任何您喜歡的語言環境,並且會使用該語言/國家/地區的正確名稱。

使用toLocaleString你必須每次傳入語言環境和選項。 如果您打算在多個不同日期使用相同的區域設置信息和格式化選項,則可以使用Intl.DateTimeFormat

var formatter = new Intl.DateTimeFormat("fr", { month: "short" }),
month1 = formatter.format(new Date()),
month2 = formatter.format(new Date(2003-05-12));

// sept. and déc.
console.log(month1 + " and " + month2);

這個API的主要問題是它是新的。 它僅適用於Blink瀏覽器(Chrome和Opera),IE11,Microsoft Edge和Firefox 29+。 它不支持Safari。

有關更多信息,請參閱我在國際化API上的博客文章。

Question

我怎樣才能從這個日期對像在JavaScript中生成月份的名稱(例如:10月/ 10月)?

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



如果你不介意擴展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對象。




隨著momentjs ,只需使用format符號。

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



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

在Moment.js中非常簡單,不需要在代碼中硬編碼月份名稱:以月份名稱格式和全年(2015年5月)獲取當前月份和年份:

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



如果您不想使用時間並想顯示月份名稱 -

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



獲取月份名稱的數組:

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/




我有一個部分解決方案,我想出了。 它使用正則表達式來提取月份和日期名稱。 但是當我瀏覽區域和語言選項(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(","));
    }



使用這個伴侶

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



如果你使用jQuery,你可能也使用jQuery UI,這意味著你可以使用$.datepicker.formatDate()

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



您可以使用幾種可用的日期格式化程序中的一種。 由於這屬於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




要獲取當前月份而不輸入日期,請使用以下代碼:

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



你可以用datej來做到這一點。 檢查FormatSpecifiers ,MMMM為您提供月份名稱:

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

並且datejs獲得了超過150個語言環境的本地化! 看這裡




將名稱存儲在數組中,並按月份的索引查找。

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()方法




嘗試:

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

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



Related