Получить название месяца от даты
Как я могу создать имя месяца (например: Oct/October) из этого объекта даты в JavaScript?
var objDate = new Date("10/11/2009");
30 ответов:
более короткая версия:
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()]);
теперь это можно сделать с помощью ECMAScript Internationalization API:
var date = new Date("10/11/2009"), locale = "en-us", month = date.toLocaleString(locale, { month: "long" });
http://jsfiddle.net/dstorey/Xgerq/
" длинный "использует полное название месяца," короткий "для короткого имени и" узкий " для более минимальной версии, такой как первая буква в алфавитных языках.
вы можете изменить языковой стандарт на любой, который вам нравится, и он будет использовать правильное имя для этого языка/страны.
С
toLocaleString
вы должны передать в локаль и параметры каждый раз. Если вы собираетесь использовать одну и ту же информацию о локали и параметры форматирования на несколько разных дат, вы можете использоватьIntl.DateTimeFormat
вместо:var formatter = new Intl.DateTimeFormat("fr", { month: "short" }), month1 = formatter.format(new Date()), month2 = formatter.format(new Date(2003-05-12)); // sept. and déc. console.log(month1 + " and " + month2);
основная проблема с этим API-это новый. Он доступен только в браузерах Blink (Chrome и Opera), IE11, Microsoft Edge, Firefox 29+ и Safari 10+
для получения дополнительной информации см. мой блог на интернационализация 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.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
получить текущий месяц без ввода даты, используйте этот код:
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, мммм дает вам название месяца:
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(); }
или вы можете сделать прототип даты, как
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(); }
пример:
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"});
естественный формат в эти дни, чтобы использовать момент.js.
способ получить месяц в строковом формате, очень прост в данный момент.js не нужно жестко кодировать имена месяцев в вашем коде: Чтобы получить текущий месяц и год в формате названия месяца и полный год (май 2015):
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 необходимы некоторые модификации, потому что она возвращает все дата.
вместо объявления массива, который содержит все имя месяца, а затем указывает с индексом, мы также можем написать его в более короткой версии, как показано ниже:
var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug
вы можете использовать один из нескольких доступных форматов даты. Поскольку это входит в спецификацию 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
к сожалению, лучший способ извлечь имя месяца из представления 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'
С momentjs, просто использовать
хранить имена в массиве и искать по индексу месяца.
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 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;
есть действительно полезная дата болт-на здесь: http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/methods/date.js?r=6305 Это расширяет встроенный класс Date с помощью таких методов, как getMonthName() и т. д..
Если вы используете jQuery, вы, вероятно, также с помощью jQuery пользовательского интерфейса, что означает, что вы можете использовать $.элемент управления 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);
Это даст вам сокращенное название месяца, например, октября. Я считаю, что дата будет приходить во всевозможных форматах в зависимости от инициализации и вашей локали, поэтому взгляните на то, что
toDateString()
возвращает и пересчитывает вашsubstring()
значения, основанные на этом.
Если вы не хотите использовать момент и хотите отобразить имя месяца -
.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");
вот список форматеров из сайт кэндо:
"d" отображает день месяца, от 1 до 31.
" dd " день месяца, с 01 по 31.
" ddd " сокращенное название дня недели.
"dddd" полное название дня недели.
" f " десятые доли секунды в дате и значение времени.
"ФФ" сотые доли секунды в значении даты и времени.
" fff " миллисекунды в значении даты и времени.
" м " месяц, с 1 по 12.
" мм " месяц, с 01 по 12.
" МММ " сокращенное название месяца.
"мммм", полное название месяца.
" h " час, используя 12-часовые часы от 1 до 12.
" чч " час, используя 12-часовые часы с 01 до 12.
" H " час, используя 24-часовые часы от 1 до 23.
" чч " час, используя 24-часовые часы с 01 до 23.
" m " минута, от 0 до 59.
" мм " минута, с 00 до 59.
" s " второй, от 0 до 59.
" ss " второй, с 00 до 59.
" tt " AM / PM обозначение.
" yy " последние два символа из значения года.
"гггг" полное значение года.
" 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(",")); }
просто расширяясь на многие другие отличные ответы - если вы используете 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)
. Основное преимущество этого заключается в том, что per @nickf сказал об избежании глобального пространства имен.
использовать этот мат
function month(a){ var mNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; return mNames[a-1]; }
чтобы получить массив имени месяца:
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));