JavaScriptでこの日付オブジェクトから月の名前(例:10月/ 10月)を生成する方法を教えてください。
var objDate = new Date("10/11/2009");
短いバージョン
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の答え を見てください。
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 に関する私のブログ投稿を参照してください。
これは、ローカライズをサポートしたものです:)
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: [...]};
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オブジェクトに適用されます。
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"を使用してください。
他の機能の長いリストに加えて、それは強力な 国際化のサポート を持っています。
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();
そのためには datejs を使用することができます。 FormatSpecifiers を確認してください。MMMでは月の名前がわかります。
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
そしてdatejsはそれを150以上のロケールにローカライズしました! ここをクリック
これにより、日付オブジェクトから一般的な簡単な処理をいくつか実行できます。
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
試してください:
var objDate = new Date("10/11/2009");
var strDate =
objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
objDate.toLocaleString("en", { month: "long" }) + ' ' +
objDate.toLocaleString("en", { year: "numeric"});
今日の自然なフォーマットはMoment.jsを使うことです。
月を文字列形式で取得する方法は、Moment.jsでは非常に単純です。コードに月名をハードコードする必要はありません。
moment(new Date).format("MMMM YYYY");
これはハードコーディングされた配列に依存せず、複数のロケールをサポートする方法です。
配列全体が必要な場合:
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'
すべての月の名前を保持しているインデックスを指す配列を宣言する代わりに、以下のように短いバージョンで書くこともできます。
var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
利用可能ないくつかの日付フォーマッタのうちの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 に詳細があります。
名前を配列に格納して、月のインデックスで検索します。
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()]);
JQueryを使用している場合は、おそらくjQuery UIも使用していることになります。つまり、 $ .datepicker.formatDate() を使用できます。
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
外部ライブラリを使用したくない場合、または月名の配列を保存したくない場合、あるいはブラウザの互換性のためECMAScript国際化APIが十分でない場合は、いつでも古い方法でそれを行うことができます。日付出力:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
これはあなたに省略された月名を与えるでしょう、例えば10月。初期化やロケールに応じてさまざまな形式の日付が表示されるので、toDateString()
が返すものを見て、それに基づいてsubstring()
の値を再計算します。
私の最善の解決策は次のとおりです。
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;
あなたが瞬間を使用したくない、そして月の名前を表示したいなら -
.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;
}
};
}
あなたが剣道を使っているならば、これはまたすることができます。
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日付文字列を解析するときのローカルタイムゾーン。
function getMonthName(month)
{
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-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(","));
}
日付をフォーマットする別の方法
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
私が使った簡単なハックはうまくいった:
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);
私にとってこれが最善の解決策です、
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"]
月名の配列を取得するには
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
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));
この仲間を使う
function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}
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によると、グローバル名前空間を避けることです。