Как я могу сгенерировать имя месяца (например, Oct/October) из этого объекта даты в JavaScript?
var objDate = new Date("10/11/2009");
Как я могу сгенерировать имя месяца (например, Oct/October) из этого объекта даты в 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()]);
Теперь это можно сделать с помощью API интернационализации ECMAScript:
const date = new Date(2009, 10, 10); // 2009-11-10
const month = date.toLocaleString('default', { month: 'long' });
console.log(month);
Здесь еще один, с поддержкой локализации:)
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.
Я от всей души рекомендую функцию 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
Используйте "ММММ" вместо "МММ", если вам нужно полное название месяца
В дополнение к длинному списку других функций, он имеет сильную поддержку интернационализации.
Чтобы получить текущий месяц без ввода даты, используйте этот код:
var dateToday = new Date();
var locale = "en-us";
var month = dateToday.toLocaleString(locale, {month: "long"});
alert(month);
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()))
Try:
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'
Вместо объявления массива, который удерживает все имя месяца, а затем указывая индексом, мы также можем записать его в более короткой версии, как показано ниже:
var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
Естественным форматом в наши дни является использование Moment.js.
Способ получения месяца в строчном формате очень прост в Moment.js, нет необходимости жестко кодировать имена месяцев в вашем коде: Чтобы получить текущий формат месяца и года в месяц и весь год (май 2015 года):
moment(new Date).format("MMMM YYYY");
Вы можете использовать один из нескольких доступных форматов даты. Поскольку это относится к спецификации 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
Если вы используете jQuery, вы, вероятно, также используете jQuery UI, что означает, что вы можете использовать $. datepicker.formatDate().
$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] ); // dutch
$.datepicker.formatDate( "dd MM yy", objDate );
Если вы не хотите использовать внешнюю библиотеку или хранить массив имен месяцев, или если API интернационализации ECMAScript недостаточно хорош из-за совместимости с браузером, вы всегда можете сделать это старомодным способом, извлекая информация с даты выхода:
var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);
Это даст вам название сокращенного месяца, например. Oct. Я считаю, что дата будет появляться во всех форматах в зависимости от инициализации и вашей локали, поэтому взгляните на то, что 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;
С моментами, просто используйте формат записи.
const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August
Это также можно сделать, если вы используете kendo.
kendo.toString(dateobject, "MMMM");
Вот список форматов из сайт kendo:
"d" Отображает день месяца с 1 по 31.
"dd" День месяца, с 01 по 31 год.
"ddd" Сокращенное название дня недели.
"dddd" Полное имя дня недели.
"f" Десятки секунд в значении даты и времени.
"ff" Сотые доли секунды в значении даты и времени.
"fff" Миллисекунды в значении даты и времени.
"M" Месяц, с 1 по 12.
"ММ" Месяц, с 01 по 12.
"MMM" Сокращенное название месяца.
"MMMM" Полное название месяца.
"h" Час, используя 12-часовые часы от 1 до 12.
"hh" Час, используя 12-часовые часы с 01 до 12.
"H" Час, используя 24-часовые часы от 1 до 23.
"HH" Час, используя 24-часовые часы с 01 до 23.
"m" Минута, от 0 до 59.
"mm" Минута, от 00 до 59.
"s" Второй, от 0 до 59.
"ss" Второй, от 00 до 59.
"tt" Обозначение AM/PM.
"yy" Последние два символа из значения года.
"yyyy" Значение полного года.
"zzz" Локальный часовой пояс при использовании форматов для синтаксического анализа строк даты UTC.
Сохраните имена в массиве и найдите индекс месяца.
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()]);
Здесь действительно полезная дата: http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/methods/date.js?r=6305 Это расширяет встроенный класс Date с помощью таких методов, как getMonthName() и т.д.
Если вы не хотите использовать момент и хотите отображать название месяца -
.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;
}
};
}
У меня есть частичное решение, с которым я столкнулся. Он использует регулярное выражение для извлечения имени месяца и дня. Но когда я просматриваю параметры Region и Language (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"
Для меня это лучшее решение,
а также для 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"]
Просто расширяя многие другие отличные ответы - если вы используете 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
Используйте этот помощник
function month(a){
var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
return mNames[a-1];
}