Як я можу генерувати назву місяця (наприклад: жовтень / жовтень) з цього об’єкта дати в JavaScript?
var objDate = new Date("10/11/2009");
Як я можу генерувати назву місяця (наприклад: жовтень / жовтень) з цього об’єкта дати в JavaScript?
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 році, застаріла. Дивіться відповідь Девіда Сторі для кращого рішення.
new Date()
повернення, Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)
що явно означає, що об'єкт Date вже має все це внутрішньо визначено (імена днів місяця та тижня), це не є загальнодоступним, тому нам доведеться все це набрати знову. :(
String#split
допомогою toString
або toDateString
.
Тепер це можна зробити за допомогою інтернаціоналізації API ECMAScript:
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.locale
є undefined
. це чудова відповідь для інших реалізацій JS!
Якщо ви не заперечуєте над розширенням прототипу 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.
Я щиро рекомендую 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", якщо вам потрібно повне найменування місяця
Окрім тривалого переліку інших особливостей, він має сильну підтримку інтернаціоналізації .
Luxon
і date-fns
, але, знову ж , є широка підтримка браузера для Інтернаціоналізація API в даний час .
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();
Цим може бути виконаний якийсь звичайний простий процес від об'єкта дати.
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
Ви можете використовувати datejs для цього. Перевірте FormatSpecifiers , MMMM дає назву місяця:
var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));
І datejs отримав локалізацію для більш ніж 150 мов! Дивіться тут
Спробуйте:
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. У мозіллі потрібні деякі зміни, оскільки вона повертає всю дату.
toLocaleString
На жаль, найкращий спосіб отримати назву місяця - із представлення 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
MAY 1, 2015 AT 12:00:00 AM GMT-4
(при використанні { month: "long" }
параметрів)
new Date().toLocaleString(navigator.language, { month: "short" })
document.write(new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}))
Природним форматом цього дня є використання Moment.js.
Спосіб отримання місяця у строковому форматі в Moment.js дуже простий, не потрібно чітко вводити назви місяців у своєму коді: Щоб отримати поточний місяць та рік у форматі імені місяця та повного року (травень 2015 року):
moment(new Date).format("MMMM YYYY");
Luxon
і date-fns
, але, знову ж , є широка підтримка браузера для Інтернаціоналізація API в даний час .
Ще один спосіб форматування дати
new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"
Ви можете використовувати один із декількох доступних форматів дати. Оскільки це підпадає під специфікацію 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
Якщо ви не хочете використовувати зовнішню бібліотеку або зберігати масив імен місяців або якщо API інтернаціоналізації ECMAScript недостатньо хороший через сумісність браузера, ви завжди можете це зробити старомодним способом, витягуючи інформацію з дата виходу:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Це дасть вам скорочену назву місяця, наприклад, жовтень. Я вважаю, що дата буде наводитись у різного формату залежно від ініціалізації та вашої локальної локації, тому подивіться, що toDateString()
повертається та перерахуйте ваші substring()
значення на основі цього.
Якщо ви використовуєте jQuery, ви, ймовірно, також використовуєте інтерфейс jQuery, що означає, що ви можете використовувати $ .datepicker.formatDate () .
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
Моє найкраще рішення:
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;
Для моментів просто використовуйте позначення формату .
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
moment
- це дуже велика бібліотека, і це є надмірним способом. Сучасні альтернативи включають Luxon
і date-fns
, але, знову ж , є широка підтримка браузера для Інтернаціоналізація API в даний час .
Це також можна зробити, якщо ви використовуєте кендо.
kendo.toString(dateobject, "MMMM");
Ось перелік форматів з сайту kendo :
"d" Відображає день місяця, з 1 по 31.
"дд" День місяця, з 01 по 31 рік.
"ddd" Скорочена назва дня тижня.
"dddd" Повна назва дня тижня.
"f" Десяті секунди у значенні дати та часу.
"ff" Соті секунди у значенні дати та часу.
"fff" Мілісекунд у значенні дати та часу.
"М" Місяць, з 1 по 12.
"ММ" Місяць, з 01 по 12 рік.
"MMM" Скорочена назва місяця.
"MMMM" Повна назва місяця.
"h" Година, використовуючи 12-годинний годинник від 1 до 12.
"hh" Година, використовуючи 12-годинний годинник від 01 до 12.
"H" Година, використовуючи цілодобовий годинник від 1 до 23.
"НН" Година, використовуючи цілодобовий годинник з 01 по 23 години.
"м" Хвилина, від 0 до 59.
"мм" Хвилина, з 00 по 59.
"s" Другий, від 0 до 59.
"ss" Другий, з 00 по 59.
"tt" Позначник AM / PM.
"yy" Останні два символи зі значенням року.
"yyyy" Повна вартість року.
"zzz" Локальний часовий пояс при використанні форматів для розбору рядків дати UTC.
Ви можете просто використовувати 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
Якщо ви не хочете використовувати момент і хочете відображати ім'я місяця -
.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;
}
};
}
Для мене це найкраще рішення,
також для 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"]
Зберігайте імена в масиві та шукайте за індексом місяця.
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()]);
var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
? Набагато коротше, ніж додавати їх окремо ...
У мене є часткове рішення, яке я придумав. Він використовує регулярний вираз для вилучення назви місяця та дня. Але переглядаючи параметри регіону та мови (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(","));
}
Просто поширюючись на безліч інших відмінних відповідей - якщо ви використовуєте 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 сказано про те, щоб уникнути глобального простору імен.
Щоб отримати масив назви місяця:
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));
Я використав швидкий злом, який працює добре:
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);