날짜에서 월 이름 가져 오기


답변:


1138

더 짧은 버전 :

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의 답변 을 참조하십시오 .


401
new Date()반환 Tue Sep 06 2011 20:02:25 GMT+0200 (CEST)하는 것조차도 Date 객체에 이미 내부적으로 정의 된 모든 달 (주 및 요일 이름)이 공개되어 있지 않다는 것을 분명히 실망 스럽 습니다. 따라서 다시 입력해야합니다. :(
zanona

9
지원되는 각 언어에 대한 월 이름을 포함해야하는 경우 이상적인 솔루션이 아닙니다. 사용하여 더 나은 방법이있을거야 String#splittoStringtoDateString.
Ryan

23
여러 언어 = 다차원 배열;) 번역 [ "monthName"] [currentLanguage] [d.getMonth ()]
nuala

25
@ zanona— 날짜 개체에 반드시 "내부적으로 정의 된 모든 것"이있는 것은 아닙니다. ECMA-262에 필요한 것은 시간 값 이며 숫자입니다. 당신이보고 있는 것은 구현에 따라 Date.prototype.toString 의 결과입니다 .
RobG

9
@Devin 그러나 액세스 할 때마다 배열을 재 할당합니다.
Cole Johnson

777

이제 ECMAScript Internationalization 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') 변경할 수 있으며 해당 언어 / 국가에 올바른 이름을 사용합니다.

toLocaleStringAPI 를 사용하면 매번 로캘과 옵션을 전달해야합니다. 여러 다른 날짜에 동일한 로캘 정보 및 서식 옵션을 사용하려는 경우 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".

자세한 내용은 Internationalization API 에 대한 내 블로그 게시물을 참조하십시오 .


1
Safari Technology Preview가이를 지원함을 확인할 수 있습니다. 내가 허용 대답해야한다고 생각
살만 Hasrat 칸

1
노드에서도 작동합니다!
mikemaccana

4
훌륭한 해결책이지만 내 유스 케이스의 경우 너무 느려졌습니다. 나는 수백 개의 항목을 처리하고 있었고 한 달에 1 년 (크롬, 사파리)을 얻기 위해 평균 항목 당 약 1ms였습니다. 나는 받아 들여진 대답을 사용했지만 결국 훨씬 더 나은 성과를 얻었습니다. 몇 번만 호출하면 좋을 것입니다.
t.888

7
이것은 대부분의 브라우저에서 지원됩니다 : caniuse.com/#search=intl
eyal83

2
React Native에 대한 참고 사항은 iOS 장치에서 작동하지만 Android에서는 잘못 표시됩니다 (전체 타임 스탬프를 뱉어 내기 만 함).
hardanger

162

현지화를 지원하는 또 하나는 다음과 같습니다. :)

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: [...]};

2
참고 이 노드에서 작동하지 않습니다 으로 6.x에서의로 Date.locale입니다 undefined. 그래도 다른 JS 구현에 대한 훌륭한 답변입니다!
mikemaccana

현지화 된 이름 배열이 Date.prototype.toLocaleString을 사용하여 작성된 경우이 방법이 적합 할 수 있습니다. 또한 내장 프로토 타입과 객체를 확장하는 것은 좋은 생각이 아닙니다.
RobG

62

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 Date 객체에 적용됩니다 .


6
"그리고 이것을 원하지 않는 몇 가지 이유가있다". 궁금한 점은 무엇입니까?
KooiInc

13
@ Kooilnc : 그것은 당신이 본질적으로 글로벌 공간에서 일하고 있기 때문입니다. 이 작업을 수행하는 다른 사람의 기능이나 라이브러리를 가져 오면 서로 덮어 쓸 수 있습니다.
nickf

61

다음 과 같이 사용할 수 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"을 사용하십시오.

다른 기능의 긴 목록 외에도 국제화를 강력하게 지원합니다 .


2
첫 번째 결과는 "Apr"입니다. "MMM"은 그 달의 처음 세 글자를 표시합니다. 전체 이름을 원하면 "MMMM"을 대신 사용하십시오. 도움이 필요하면 해당 설명서 를 참조하십시오 .
Tomnar

과도하게 최적화하고 http 요청을 줄이려는 경우이 옵션이 적합하지 않을 수 있습니다. 대신 한 달의 코드로 월 이름을 형식화하려는 경우 월 이름 배열 만 사용하십시오.
OzzyTheGiant

3
모멘트는 매우 큰 라이브러리이며이를 위해 과도하게 사용됩니다. 현대적인 대안으로는 Luxonand가 포함 date-fns되지만, 요즘 Internationalization API에 대한 광범위한 브라우저 지원이 있습니다 .
Dan Dascalescu

21
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();

18

이것에 의해 날짜 객체로부터의 일반적인 쉬운 프로세스가 수행 될 수있다.

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


2
감사! 아직 프로토 타입을 이해하지 못하지만이 기능을 사용해보기를 기대합니다.
Eric Hepperle-CodeSlayer2010

17

datejs 를 사용 하여 그렇게 할 수 있습니다 . FormatSpecifiers를 확인하십시오. MMMM은 월 이름을 제공합니다.

var objDate = new Date("10/11/2009");
document.write(objDate.toString("MMMM"));

그리고 datejs는 150 개 이상의 로케일로 현지화되었습니다! 여기를 봐


12

시험:

var objDate = new Date("10/11/2009");

var strDate =
    objDate.toLocaleString("en", { day: "numeric" }) + ' ' +
    objDate.toLocaleString("en", { month: "long"  }) + ' ' +
    objDate.toLocaleString("en", { year: "numeric"});

이것은 2017 년 겨울에 일했습니다! 3 년 전에 다른 사용자가 제안한대로 "en-us"를 사용하면 Chrome에서 작동하지 않습니다.
Eric Hepperle-CodeSlayer2010

9

하드 코딩 된 배열에 의존하지 않고 여러 로케일을 지원하는 방법이 있습니다.

전체 배열이 필요한 경우 :

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에서는 전체 날짜를 반환하므로 일부 수정이 필요합니다.


아직 어린 시절에도 작동하지 않습니다. 의 때문에toLocaleString
세르게이 Panfilov

8

불행히도 월 이름을 추출하는 가장 좋은 방법은 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'

8

모든 월 이름을 보유하고 인덱스를 가리키는 배열을 선언하는 대신 아래와 같이 더 짧은 버전으로 작성할 수도 있습니다.

var objDate = new Date().toLocaleString("en-us", { month: "long" }); // result: August
var objDate = new Date().toLocaleString("en-us", { month: "short" }); // result: Aug

이 기능은 브라우저에서 안정적으로 작동하지 않습니다. Safari (모바일 및 데스크탑)는 다음과 같이 출력됩니다 : MAY 1, 2015 AT 12:00:00 AM GMT-4( { month: "long" }매개 변수를 사용할 때 )
David M.

1
다음을 사용하여 기본값을 얻을 수도 있습니다.new Date().toLocaleString(navigator.language, { month: "short" })
Remo H. Jansen


7

요즘의 자연스러운 형식은 Moment.js를 사용하는 것입니다.

문자열 형식으로 월을 얻는 방법은 Moment.js에서 매우 간단합니다. 코드에 월 이름을 하드 코딩 할 필요가 없습니다. 현재 월과 연도를 월 이름 형식과 풀 년으로 가져 오려면 (2015 년 5 월) :

  moment(new Date).format("MMMM YYYY");

다른 목적으로 이미 설치 한 순간이 가장 간단한 솔루션입니다.
CFP 지원

1
모멘트는 매우 큰 라이브러리이며이를 위해 과도하게 사용됩니다. 현대의 대안은 Luxonand를 포함 date-fns하지만 현재 Internationalization API에 대한 광범위한 브라우저 지원이 있습니다 .
Dan Dascalescu

7

날짜 형식을 지정하는 다른 방법

new Date().toLocaleString('en-us',{month:'long', year:'numeric', day:'numeric'}) //output: "May 21, 2019"

6

사용 가능한 여러 날짜 형식 기 중 하나를 사용할 수 있습니다. 이는 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 에 더 있습니다.


4

외부 라이브러리를 사용하지 않거나 월 이름 배열을 저장하지 않거나 브라우저 호환성으로 인해 ECMAScript 국제화 API가 충분하지 않은 경우 언제든지 정보를 추출하여 구식 방식으로 수행 할 수 있습니다 날짜 출력 :

var now = new Date();
var monthAbbrvName = now.toDateString().substring(4, 7);

이렇게하면 약식 월 이름 (예 : 10 월)이 표시됩니다. 초기화 및 로캘에 따라 날짜가 모든 종류의 형식으로 나올 것이라고 생각하므로 toDateString()반환 substring()값을 확인 하고 그에 따라 값을 다시 계산하십시오 .


3

jQuery를 사용하는 경우 아마도 jQuery UI를 사용하고있을 것이므로 $ .datepicker.formatDate ()를 사용할 수 있습니다 .

$.datepicker.setDefaults( $.datepicker.regional[ "nl" ] );   // dutch
$.datepicker.formatDate( "dd MM yy", objDate );

3

내 최선의 해결책은 다음과 같습니다.

       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;

다정한 것 같습니다 ... 그리고 그것은 실제로 OP의 질문에 대답하지 않습니다
David M.

1
이것이 "최상의 솔루션"이되는 이유는 무엇입니까?
Dan Dascalescu

3

momentjs 바로 사용 형식 표기법을.

const myDate = new Date()
const shortMonthName = moment(myDate).format('MMM') // Aug
const fullMonthName = moment(myDate).format('MMMM') // August

1
이 답변 moment은 이미 2 번 주어졌으며 매우 큰 라이브러리이며이를 위해 과도합니다. 현대의 대안은 Luxonand를 포함 date-fns하지만 현재 Internationalization API에 대한 광범위한 브라우저 지원이 있습니다 .
Dan Dascalescu

3

검도를 사용하는 경우에도 수행 할 수 있습니다.

kendo.toString(dateobject, "MMMM");

다음은 검도 사이트 의 포맷터 목록입니다 .

"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"연도 값의 마지막 두 문자.

"yyyy"연도 전체 값입니다.

"zzz"형식을 사용하여 UTC 날짜 문자열을 구문 분석 할 때의 현지 시간대.


3

단순히 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 설명서 에서 자세한 정보를 찾을 수 있습니다


2

순간을 사용하지 않고 월 이름을 표시하려면-

.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;
      }
    };
  }

2

나에게 이것은 최선의 해결책이다.

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"]

1

이름을 배열에 저장하고 해당 달의 인덱스를 찾습니다.

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()]);

JavaScript getMonth () 메소드


22
왜 안돼 var month = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];? 개별적으로 추가하는 것보다 훨씬 짧습니다 ...
Fizzix

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(","));
    }

그래서 최소한 영어와 스페인어로 작동합니다 ... id는 DAY, MONTH 날짜, 년도 형식을 의심합니다. FORMAT
Remus

나는 그것에 대해 조금 살펴 보았지만, UNICODE 문자 범위를 사용하는 정규 표현식을 가져야하는 진정한 언어 독립적 인 솔루션이 있다고 생각합니다. 문자 범위는 알파벳마다 다르므로 사용할 수있는 모든 RegExp에 맞는 크기가 하나도 없다고 생각합니다.
레무스

0

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가 말했다.


0

월 이름의 배열을 얻으려면 :

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

http://jsfiddle.net/polinux/qb346/


0

간단한 래퍼를 작성하십시오 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));


0

내가 잘 사용한 빠른 해킹 :

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);

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.