日付から月名を取得


回答:


1137

短いバージョン:

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の回答を参照してください。


401
それも有するビットのイライラでnew Date()返すTue Sep 06 2011 20:02:25 GMT+0200 (CEST)、我々はすべてそれを再度入力する必要がありますので、それは、パブリックではありません明らかに、すでにDateオブジェクトを意味し、このすべて内部で定義された(月と曜日の名前)を有しています。:(
zanona

9
サポートされている各言語の月名を含める必要がある場合は、理想的なソリューションではありません。使用してより良い方法があるように持っているString#splittoStringtoDateString
ライアン

23
複数の言語=多次元配列;)翻訳["monthName"] [currentLanguage] [d.getMonth()]
nuala

25
@zanona —日付オブジェクトは必ずしも「これすべて内部で定義されている」とは限りません。ECMA-262で必要なのは、数値である時間値だけです。表示されているのは、実装に依存するDate.prototype.toStringの結果です。
RobG 2013年

9
@Devinが、アクセスするたびに配列を再割り当てします。
Cole Johnson

775

ECMAScript国際化APIでこれを行うことが可能になりました。

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

'long'は、月のフルネーム'short'、短縮名、および'narrow'アルファベット言語の最初の文字などの最小限のバージョンを使用します。

ロケールをブラウザのもの'default'から好きなように変更することができ(例:)'en-us'、その言語/国の正しい名前を使用します。

ではtoLocaleStringAPIあなたは、ロケールとオプションたびに渡す必要があります。複数の異なる日付で同じロケール情報とフォーマットオプションを使用する場合は、Intl.DateTimeFormat代わりに使用できます。

const formatter = new Intl.DateTimeFormat('fr', { month: 'short' });
const month1 = formatter.format(new Date());
const month2 = formatter.format(new Date(2003, 5, 12));
console.log(`${month1} and ${month2}`); // current month in French and "juin".

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


1
Safari Technology Previewがこれをサポートしていることを確認できます。受け入れられる答えになるはずだと思う
Salman Hasrat Khan

1
ノードでも動作します!
mikemaccana 2017年

4
素晴らしい解決策ですが、私のユースケースではこれは遅すぎました。私は数百のアイテムを処理しており、月と年の両方を取得するためにアイテムあたり平均約1msでした(クロム、サファリ)。受け入れられた回答を使用してしまいましたが、それははるかに優れたパフォーマンスでした。数回呼び出すだけでよい場合は、この方法をお勧めします。
t.888 2017年

7
これは現在、ほとんどのブラウザーでサポートされています:caniuse.com/#search=intl
eyal83 '22

2
React Nativeに関する注意:これはiOSデバイスで機能しますが、Androidでは正しく表示されません(タイムスタンプ全体を吐き出すだけです)。
hardanger、

162

これはローカリゼーションをサポートする別のものです:)

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

2
なお、これはノード上で動作しませんよう6.xののようDate.localeですundefined。それは他のJS実装にとっても素晴らしい答えです!
mikemaccana 2017年

これは、ローカライズされた名前の配列がDate.prototype.toLocaleStringを使用して構築された場合に意味があります。また、組み込みのプロトタイプとオブジェクトを拡張することは良い考えとは見なされません。
RobG 2018年

62

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オブジェクトに適用されます。


6
「そして、これをしたくないいくつかの正当な理由があります」。気になるだけ:どういう意味ですか?
KooiInc 2010年

13
@Kooilnc:それはあなたが本質的にグローバル空間で働いているからです。これを実行する他の誰かの関数またはライブラリをインポートすると、それらは互いに上書きしている可能性があります。
nickf 2010年

61

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

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」を使用します

他の機能の長いリストに加えて、国際化を強力にサポートしています。


2
最初の結果は「4月」になります。「MMM」は月の最初の3文字を示します。フルネームが必要な場合は、代わりに「MMMM」を使用します。ヘルプについては、ドキュメントを参照してください。
トムナー

大量の最適化のルートをたどり、httpリクエストを削減する場合、これは選択肢にはならないかもしれません。代わりに、月の名前を1行のコードでフォーマットするだけの場合は、月の名前の配列をそのまま使用してください。
OzzyTheGiant

3
モーメントは非常に大規模なライブラリであり、これではやり過ぎです。最近の代替にはLuxondate-fnsが含まれますが、今日も国際化APIに対する幅広いブラウザサポートがあります
Dan Dascalescu 2018

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

18

これにより、日付オブジェクトからの一般的な簡単なプロセスを実行できます。

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


2
ありがとう!まだプロトタイプはわかりませんが、試してみたいです。
エリックヘッパール-CodeSlayer2010


12

試してください:

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では機能しません。
エリックHepperle-CodeSlayer2010

9

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

配列全体が必要な場合:

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


これはまだサファリでも機能しません。ためtoLocaleString
セルゲイパンフィロフ

8

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

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

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


7

今日の自然な形式は、Moment.jsを使用することです。

文字列形式で月を取得する方法は、Moment.jsで非常に簡単です。コードに月名をハードコーディングする必要はありません。現在の月と年を月名形式と年全体で取得するには(2015年5月):

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

他の目的でモーメントがすでにインストールされている場合、これが最も簡単なソリューションです。
CFPサポート

1
モーメントは非常に大規模なライブラリであり、これではやり過ぎです。最近の代替にはLuxondate-fnsが含まれますが、今日も国際化APIに対する幅広いブラウザサポートがあります
Dan Dascalescu 2018

7

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

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

6

使用可能ないくつかの日付フォーマッターの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にあります


4

外部ライブラリを使用したくない場合、または月の名前の配列を保存したくない場合、またはブラウザの互換性のためにECMAScript国際化APIが十分でない場合は、常に情報を古い方法で抽出して、日付出力:

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

これにより、10月などの短縮された月名が得られます。日付は、初期化とロケールに応じてさまざまな形式で表示されると考えられるため、何toDateString()が返されるかを確認しsubstring()、それに基づいて値を再計算します。


3

jQueryを使用している場合は、おそらくjQuery UIも使用しているため、$ .datepicker.formatDate()を使用できます。

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

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の質問に答えません
デビッドM.

1
これが「最良のソリューション」になる理由は何ですか?
Dan Dascalescu 2018

3

momentjs、ちょうど使用形式の表記を。

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

1
この回答がすでに2回与えられていることに加えて、これmoment非常に大きなライブラリであり、これではやり過ぎです。最近の代替にはLuxondate-fnsが含まれますが、今日も国際化APIに対する幅広いブラウザサポートがあります
Dan Dascalescu 2018

3

これは剣道を使用している場合にも実行できます。

kendo.toString(dateobject, "MMMM");

これが剣道サイトのフォーマッターのリストです:

"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

瞬間を使いたくない、月の名前を表示したい場合-

.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

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

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

2

単にDate.toLocaleDateString()を使用して、必要な日付をパラメーターとして解析するだけです。

const event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

const options = {  year: 'numeric', month: 'short', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('en-US', options));
// US format 


// In case you only want the month
console.log(event.toLocaleDateString(undefined, { month: 'short'}));
console.log(event.toLocaleDateString(undefined, { month: 'long'}));

詳細については、Firefoxのドキュメントをご覧ください。


1

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

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


22
なんでvar month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];?個別に追加するよりもはるかに短い...
Fizzix

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(","));
    }

したがって、最低限、英語とスペイン語で動作します... idは、日、月、日付、年であるものを疑っていますFORMAT
Remus

私は少し調べましたが、UNICODE文字範囲を使用する正規表現が必要な、本当に言語に依存しないソリューションがあると思います。文字の範囲はアルファベットごとに異なるため、使用できるすべてのRegExpに適合する1つのサイズはないと思います。
Remus

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によると、グローバル名前空間の回避についてです。


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

周りに単純なラッパーを書くだけ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

私が使用したクイックハックはうまくいきます:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.