-
10-07-2019 - |
質問
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('default', { month: 'long' });
console.log(month);
'long'
は月のフルネーム、 'short'
は短縮名、 'narrow'
は詳細名を使用しますアルファベット言語の最初の文字などの最小バージョン。
ブラウザの 'default'
から必要なロケール(たとえば、 'en-us'
)にロケールを変更できます。これには、正しい名前が使用されます言語/国。
toLocaleString
api では、毎回ロケールとオプションを渡す必要があります。複数の異なる日付で同じロケール情報と書式設定オプションを使用する場合は、代わりに 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 のブログ投稿を参照してください。
ローカライズをサポートする別の方法:)
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"
これらの関数は、javascriptの日付オブジェクト all に適用されます。
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
「MMMM」を使用「MMM」の代わりに月のフルネームが必要な場合
他の機能の長いリストに加えて、強力な国際化のサポートを備えています。 。
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 を確認すると、MMMMから月の名前がわかります:
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();
#2017年3月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"});
これは、ハードコーディングされた配列に依存せず、複数のロケールをサポートする方法です。
アレイ全体が必要な場合:
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'
今日の自然なフォーマットは、Moment.jsを使用することです。
文字列形式で月を取得する方法は、Moment.jsで非常に簡単です。コードに月の名前をハードコーディングする必要はありません。 現在の月と年を月名形式と通年(2015年5月)で取得するには:
moment(new Date).format("MMMM YYYY");
すべての月名を保持する配列を宣言してからインデックスを指す代わりに、以下のように短いバージョンで記述することもできます。
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
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/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 Internationalization 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サイトのフォーマッターのリストは次のとおりです。
&quot; d&quot; 1〜31の月の日をレンダリングします。
&quot; dd&quot;月の日、01から31まで。
&quot; ddd&quot;曜日の省略名。
&quot; dddd&quot;曜日のフルネーム。
&quot; f&quot;日付と時刻の値の10分の1秒。
&quot; ff&quot;日付と時刻の値の100分の1秒。
&quot; fff&quot;日付と時刻の値のミリ秒。
&quot; M&quot; 1〜12の月。
&quot; MM&quot; 01〜12の月。
&quot; MMM&quot;月の省略名。
&quot; MMMM&quot;月のフルネーム。
&quot; h&quot; 1〜12の12時間時計を使用した時間。
&quot; hh&quot; 01〜12の12時間時計を使用した時間。
&quot; H&quot; 1〜23の24時間時計を使用した時間。
&quot; HH&quot; 01〜23の24時間時計を使用した時間。
&quot; m&quot; 0〜59の分。
&quot; mm&quot; 00から59までの分。
&quot; s&quot; 2番目、0〜59。
&quot; ss&quot; 2番目、00から59まで。
&quot; tt&quot; AM / PM指定子。
&quot; yy&quot;年の値の最後の2文字。
&quot; yyyy&quot;年の完全な値。
&quot; zzz&quot; UTC日付文字列を解析するためにフォーマットを使用するときのローカルタイムゾーン。
私が思いついた部分的な解決策があります。正規表現を使用して月と日の名前を抽出します。しかし、地域と言語のオプション(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 getMonthName(month)
{
return ["January","February","March","April","May","June","July","August","September", "October","November","December"][parseInt(month)-1]
}
日付をフォーマットする別の方法
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
他の多くの優れた答えを拡張するだけです-jQueryを使用している場合は、次のようなことができます
$.fn.getMonthName = function(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
];
return monthNames[date.getMonth()];
};
where date
は var d = new Date(somevalue)
と同じです。これの主な利点は、@ nickfがグローバル名前空間を回避することについて述べていることです。
月名の配列を取得するには:
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
この合致を使用
function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}
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));
私が使用した簡単なハックで、うまくいきます:
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);