web-dev-qa-db-ja.com

日付から月の名前を取得する

JavaScriptでこの日付オブジェクトから月の名前(例:10月/ 10月)を生成する方法を教えてください。

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

短いバージョン

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

(2019-03-08) - 私が最初に2009年に書いた私によるこの答えは古くなっています。 David Storeyの答え を見てください。

970
Jesper

ECMAScript国際化APIを使用してこれを実行できるようになりました。

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

longは月のフルネームを、shortは短縮名を、そしてnarrowはアルファベット順の最初の文字のようなもっと最小限のバージョンを表します。

あなたはen-usからあなたが望むものにロケールを変えることができます、そしてそれはその言語/国のための正しい名前を使います。

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

詳細については、 Internationalization API に関する私のブログ投稿を参照してください。

524
David Storey

これは、ローカライズをサポートしたものです:)

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: [...]};
158
krcko

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"

これらの関数は all javascript Dateオブジェクトに適用されます。

61
nickf

format 関数の moment.js ライブラリを心からお勧めします。これは次のように使用できます。

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

月のフルネームが必要な場合は、 "MMM"の代わりに "MMMM"を使用してください。

他の機能の長いリストに加えて、それは強力な 国際化のサポート を持っています。

56
Brian M. Hunt
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();
19
Beena Shetty

そのためには datejs を使用することができます。 FormatSpecifiers を確認してください。MMMでは月の名前がわかります。

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

そしてdatejsはそれを150以上のロケールにローカライズしました! ここをクリック

17
Tim Büthe

これにより、日付オブジェクトから一般的な簡単な処理をいくつか実行できます。

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

17
M.A.K. Ripon

試してください:

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

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

今日の自然なフォーマットはMoment.jsを使うことです。

月を文字列形式で取得する方法は、Moment.jsでは非常に単純です。コードに月名をハードコードする必要はありません。

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

これはハードコーディングされた配列に依存せず、複数のロケールをサポートする方法です。

配列全体が必要な場合:

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では、日付全体を返すため、いくつかの変更が必要です。

残念ながら、月名を抽出する最良の方法は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'
7
Aaron Cronin

すべての月の名前を保持しているインデックスを指す配列を宣言する代わりに、以下のように短いバージョンで書くこともできます。

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

利用可能ないくつかの日付フォーマッタのうちの1つを使用できます。これは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 に詳細があります。

6
Dinesh

moment js では、 format 表記を使用してください。

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

名前を配列に格納して、月のインデックスで検索します。

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()メソッド

3
rahul

JQueryを使用している場合は、おそらくjQuery UIも使用していることになります。つまり、 $ .datepicker.formatDate() を使用できます。

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

外部ライブラリを使用したくない場合、または月名の配列を保存したくない場合、あるいはブラウザの互換性のためECMAScript国際化APIが十分でない場合は、いつでも古い方法でそれを行うことができます。日付出力:

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

これはあなたに省略された月名を与えるでしょう、例えば10月。初期化やロケールに応じてさまざまな形式の日付が表示されるので、toDateString()が返すものを見て、それに基づいてsubstring()の値を再計算します。

3
Matt K

私の最善の解決策は次のとおりです。

       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;
3
user3920942

あなたが瞬間を使用したくない、そして月の名前を表示したいなら -

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

あなたが剣道を使っているならば、これはまたすることができます。

kendo.toString(dateobject, "MMMM");

こちらは kendo site からのフォーマッタの一覧です。

"d" 1から31までの月の日を表示します。

"dd" 01から31までの月の日。

"ddd"曜日の省略名。

"dddd"曜日のフルネーム。

"f"日時値の10分の1秒。

"ff"日時値の100分の1秒。

"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"年の値から最後の2文字。

"yyyy"年フル値。

"zzz"フォーマットを使用してUTC日付文字列を解析するときのローカルタイムゾーン。

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

私は思いついた部分的な解決策を持っています。月と日の名前を抽出するために正規表現を使用します。ただし、地域と言語のオプション(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(","));
    }
1
Remus

日付をフォーマットする別の方法

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

私が使った簡単なハックはうまくいった:

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

私にとってこれが最善の解決策です、

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"]
0
Kratak

月名の配列を取得するには

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
vava

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
John Slegers

この仲間を使う

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

JQueryを使用している場合は、他の多くの優れた回答を拡張するだけで、次のようなことができます。

$.fn.getMonthName = function(date) {

    var monthNames = [
    "January", "February", "March",
    "April", "May", "June",
    "July", "August", "September",
    "October", "November", "December"
    ];

    return monthNames[date.getMonth()];

};

datevar d = new Date(somevalue)と同じです。これの主な利点は@ nickfによると、グローバル名前空間を避けることです。

0
Tim