PHP에서 숫자를 월 이름으로 변환


156

이 PHP 코드가 있습니다.

$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));

echo $monthName;

그러나 December오히려 August.

$result["month"]8과 같으므로 sprintf함수는 a 0를 추가 하여 만듭니다 08.


6
이 날짜를 완전한 날짜 (2013 년 8 월 21 일)로 변환하지 않는 한, 또는 날짜와 매우 유사한 무언가는 strtotime당신이 무엇을하려고하는지 전혀 모릅니다. 또는 이와 같은 스위치를 사용하십시오.
phpisuber01 2013-08-27

죄송합니다-테이블에서 MONTH (날짜 시간)을 선택하는 SQL 쿼리가 있기 때문에 $ result [ "month"]는 8입니다 ... 따라서 테이블에서 전체 날짜 형식
user2710234

1
그러나 strtotime"8"이 무엇을 의미하는지 전혀 모릅니다. strtotime"2012-05-12 08:43:12"와 같은 전체 타임 스탬프를 구문 분석합니다. 이 문맥에서 "8"은 무엇을 의미합니까?
deceze

왜 안돼 : echo date( "F", time() );? 예를 들어 echo date( "F", strtotime("2019-03-09") );"March"를 출력합니다
Rob Watts

답변:


367

이를 수행하는 권장 방법 :

요즘에는 모든 날짜 / 시간 수학에 DateTime 객체를 사용해야합니다. 이를 위해서는 PHP 버전이 5.2 이상이어야합니다. Glavić의 답변 에서 볼 수 있듯이 다음을 사용할 수 있습니다.

$monthNum  = 3;
$dateObj   = DateTime::createFromFormat('!m', $monthNum);
$monthName = $dateObj->format('F'); // March

!서식 문자는 받는 사람 모두 재설정하는 데 사용되는 유닉스 시대를 . m형식 문자는 앞에 0이있는 달의 숫자 표현입니다.

대체 솔루션 :

이전 PHP 버전을 사용 중이고 현재 업그레이드 할 수없는 경우이 솔루션을 사용할 수 있습니다. date()function 의 두 번째 매개 변수는 타임 스탬프를 허용하며 다음과 같이 타임 스탬프 mktime()를 만드는 데 사용할 수 있습니다 .

$monthNum  = 3;
$monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March

당신은 같은 3 글자 월 이름 싶다면 Mar변화 F에를 M. 사용 가능한 모든 포맷 옵션 목록은 PHP 매뉴얼 문서 에서 찾을 수 있습니다 .


36
이것은 LC_TIME 로케일을 존중하지 않으며 항상 영어로 월 이름을 출력합니다.
Dereckson 2014 년

2
나는 이것을 본 적이 없다-치명적인 오류 : 48 플러스의 Noone에서 비 객체에 대한 멤버 함수 format () 호출이 이것을 가지고 있지 않습니까?
Jaroslav Štreit

1
왜 우리가 이것을 위해 DateTime 객체를 "정말로 사용해야한다"고 말합니까? DateTime 객체는 유용하지만 date () 함수는 이처럼 간단한 작업 만한다면 훨씬 더 적은 오버 헤드 (속도와 메모리 측면에서)를 가지므로 훨씬 간단합니다.
orrd jan

4
@orrd : date ()와 DateTime의 속도 차이가 구축중인 애플리케이션의 병목 현상으로 판명되면 걱정해야 할 더 큰 문제가 있다고 말하고 싶습니다. 필연적으로 날짜와 함께 다른 작업을해야하는 실제 응용 프로그램의 경우 API를 더 쉽게 읽을 수 있으므로 객체에있는 것이 더 좋습니다.
Amal Murali

1
@orrd : DateTime이 다운 보트를 보증한다고 제안하는 것만으로도 놀랐습니다. : P DRY : artima.com/intv/dry.html
Amal Murali

42

모두가 strtotime () 및 date () 함수를 사용하고 있기 때문에 DateTime 예제 를 보여 드리겠습니다 .

$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');

또는을 사용 DateTime::createFromFormat('m|', $result['month']);하여 누락 된 필드 만 재설정 할 수 있습니다 .
null 허용

이 솔루션을 사용하여 언어를 변경하는 방법이 있습니까?
Michel Ayres

@MichelAyres : 아니요. 그것을 위해 사용해야 strftime()할 것입니다.
Amal Murali

30

사용 mktime():

<?php
 $monthNum = 5;
 $monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
 echo $monthName; // Output: May
?>

PHP 매뉴얼 참조 : http://php.net/mktime


월 이름이 지나면 월 번호를 얻는 방법이 있습니까?
Nisha

@Nisha use paramter "m"는 월을 2 자리 숫자로 string. 예 : January = 01, February = 02
Zac

19

strtotime 표준 날짜 형식을 예상하고 타임 스탬프를 다시 전달합니다.

strtotime날짜 형식을 출력하기 위해 단일 숫자를 전달 하는 것 같습니다 .

mktime날짜 요소를 매개 변수 로 사용 하는 것을 사용해야합니다 .

전체 코드 :

$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", mktime(null, null, null, $monthNum));

echo $monthName;

그러나 mktime 함수는 월 번호 앞에 0이 필요하지 않으므로 첫 번째 줄은 완전히 필요하지 않습니다. $result["month"] 함수에 바로 전달할 수 있습니다.

그런 다음 이것은 날짜를 인라인으로 반영하여 단일 행으로 결합 할 수 있습니다.

리팩토링 된 코드 :

echo date("F", mktime(null, null, null, $result["month"], 1));

...


대신 이상하게 date("F", mktime(null, null, null, 2));반환 March됩니다 February.
Mischa

5
잘 알았습니다, @Mischa. 요일 (5 번째 매개 변수)을 설정하지 않으면 mktime은 현재 요일을 사용합니다. 오늘은 31 일입니다. 2 월 31 일은 무엇입니까? :)
그렉

리팩토링 된 코드에 오류가 있습니다. 1에 5 매개 변수로 제공되지 않습니다 mktime3 매개 변수 만 등을 date하는 것으로 생산하고하지 않을 결과
Ejaz

19

현재 로케일과 관련하여 변환을 수행하려면 다음 strftime함수를 사용할 수 있습니다 .

setlocale(LC_TIME, 'fr_FR.UTF-8');                                              
$monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));

date로케일을 존중하지 않습니다 strftime.


고마워요! 하지만 $monthName = utf8_encode(strftime('%B', mktime(0, 0, 0, $monthNumber)));'Août'처럼 강조된 문자를 표시하기 위해 사용해야 했습니다
Roubi

3
@Roubi utf8_encode는 "ISO-8859-1 문자열을 UTF-8로 인코딩"으로 문서화되어 있으므로 귀하의 û가 ISO-8859-1임을 의미합니다. 모든 곳에서 UTF-8을 원하고 PHP 코드가 기본적으로 UTF-8로 실행되지 않는 경우 setlocale에서 LC_TIME 대신 LC_ALL을 사용할 수 있습니다.
Dereckson 2018

7

주어진 번호에서 한 달을 인쇄하는 방법은 여러 가지가 있습니다. 당신을 위해 하나의 스위트를 선택하십시오.

1. 매개 변수 'F'와 함께 date () 함수

코드 예 :

$month_num = 10;
echo date("F", mktime(0, 0, 0, $month_num, 10)); //output: October

2. createFromFormat ()을 사용하여 PHP 날짜 객체 생성

코드 예

$dateObj   = DateTime::createFromFormat('!m', $monthNum);
echo "month name: ".$dateObj->format('F'); // Output: October

3. strtotime () 함수

echo date("F", strtotime('00-'.$monthNum.'-01')); // Output: October

4. mktime () 함수

echo date("F", mktime(null, null, null, $monthNum)); // Output: October

5. jdmonthname () 사용

$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct

6

연초부터 끝까지 달 이름 배열을 원하면 드롭 다운 선택을 채우려면 다음을 사용합니다.

for ($i = 0; $i < 12; ++$i) {
  $months[$m] = $m = date("F", strtotime("January +$i months"));
}

4

필요에 따라 조정

$m='08';
$months = array (1=>'Jan',2=>'Feb',3=>'Mar',4=>'Apr',5=>'May',6=>'Jun',7=>'Jul',8=>'Aug',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dec');
echo $months[(int)$m];

1
불필요한 날짜 변환없이 간단하고 요점.
martti

4

월 번호가있는 경우 먼저 기본 날짜가 1 일이고 기본 연도가 현재 연도 인 날짜를 만든 다음 만든 날짜에서 월 이름을 추출 할 수 있습니다.

echo date("F", strtotime(date("Y") ."-". $i ."-01"))

이 코드는 $ i에 월 번호가 저장되어 있다고 가정합니다.

이것이 누군가에게 도움이되기를 바랍니다.



2

이것은 매우 쉬운 일입니다. 왜 그렇게 많은 사람들이 그렇게 나쁜 제안을하고 있습니까? @Bora가 가장 가깝지만 이것이 가장 강력합니다.

/***
 * returns the month in words for a given month number
 */
date("F", strtotime(date("Y")."-".$month."-01"));

이것이 그것을하는 방법이다


2

현재 동일한 문제를 해결하기 위해 아래 솔루션을 사용하고 있습니다.

//set locale, 
setlocale(LC_ALL,"US");

//set the date to be converted
$date = '2016-08-07';

//convert date to month name
$month_name =  ucfirst(strftime("%B", strtotime($date)));

echo $month_name;

로케일 설정에 대해 자세히 알아 보려면 http://php.net/manual/en/function.setlocale.php 로 이동 하십시오.

strftime에 대한 자세한 내용은 http://php.net/manual/en/function.strftime.php 를 참조 하십시오.

Ucfirst() 문자열의 첫 글자를 대문자로 표시하는 데 사용됩니다.


utf8과의 호환성을 위해 try : utf8_encode (ucfirst (strftime ( "% B", strtotime ($ date))));
Mimouni

1
@Mimouni utf8_encode 함수가 ISO-8859-1 문자열을 UTF-8로 변환하므로 필요하지 않지만 LC_ALL을 통해 코드는 UTF-8을 출력하도록 지시 할 수 있습니다 (예 : 대신 en_US.UTF-8을 사용하는 경우). 우리.
Dereckson 2018


1

strtotime또는로 설정된 필드가 필요합니다.mktime

echo date("F", strtotime('00-'.$result["month"].'-01'));

mktime설정 한 경우에만 달. 이걸로 해봐:

echo date("F", mktime(0, 0, 0, $result["month"], 1));


1

이것은 날짜-시간 변환의 모든 요구에 적합합니다.

 <?php
 $newDate = new DateTime('2019-03-27 03:41:41');
 echo $newDate->format('M d, Y, h:i:s a');
 ?>


0

cal_info ()를 사용하는 것이 숫자를 문자열로 변환하는 가장 쉬운 방법이라고 생각합니다.

$monthNum = sprintf("%02s", $result["month"]); //Returns `08`
$monthName = cal_info(0); //Returns Gregorian (Western) calendar array
$monthName = $monthName[months][$monthNum];

echo $monthName; //Returns "August"

cal_info ()에 대한 문서를 참조하십시오.



0

나는이 질문이 얼마 전에 요청되었다는 것을 알고 있지만이 답변을 찾는 모든 사람들이 전체 if / else 문을 작성하는 것을 피하려고 할 것이라고 생각했기 때문에 복사 / 붙여 넣기 할 수 있도록 작성했습니다. 이 함수의 유일한주의 사항은 0으로 인덱싱 된 숫자가 아니라 월의 실제 숫자에 해당하므로 1 월은 0이 아니라 1입니다.

function getMonthString($m){
    if($m==1){
        return "January";
    }else if($m==2){
        return "February";
    }else if($m==3){
        return "March";
    }else if($m==4){
        return "April";
    }else if($m==5){
        return "May";
    }else if($m==6){
        return "June";
    }else if($m==7){
        return "July";
    }else if($m==8){
        return "August";
    }else if($m==9){
        return "September";
    }else if($m==10){
        return "October";
    }else if($m==11){
        return "November";
    }else if($m==12){
        return "December";
    }
}

4
스위치 / 케이스를 사용하지 않은 이유는 무엇입니까?
Artjom B.

내가 추측 할 수 있었을 것입니다. 개인적인 선택은 대부분 읽기가 더 쉬우 며 12 가지 옵션 만 있으면 속도 차이는 무시할 수 있습니다.
Freaky Turtle

다국어 기반 웹 사이트가있는 경우 작동하지 않습니다
Crustamet

아니요. 반환 된 문자열을 선택한 언어로 월을 반환하는 i18n 함수로 바꿀 수 있습니다.
Freaky Turtle

0

월 번호를 제공하여 월 이름을 얻으려면

$ month_number = 5;

$ monthName = date ( 'F', mktime (0, 0, 0, $ month_number, 10));

'F'는 월 이름을 반환합니다. '할 수있다'


0

이것이 내가 한 방법입니다

// sets Asia/Calcutta time zone
date_default_timezone_set("Asia/Calcutta");

//fetches current date and time
$date = date("Y-m-d H:i:s");

$dateArray = date_parse_from_format('Y/m/d', $date);
$month = DateTime::createFromFormat('!m', $dateArray['month'])->format('F');
$dateString = $dateArray['day'] . " " . $month  . " " . $dateArray['year'];

echo $dateString;

보고 30 June 2019


0

여기서 간단한 트릭은 필요에 따라 실행 가능한 strtotime () 함수를 사용할 수 있습니다. 숫자를 월 이름으로 변환합니다.

1. 1 월, 2 월, 3 월의 결과를 원하면 날짜 안에 'M'을 매개 변수로하여 아래를 시도해보세요.

$month=5;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;

출력 : 5 월

/ 2. 'M'대신 'F'를 사용하여 전체 월 이름을 출력으로 1 월 2 월 3 월 등으로 얻을 수 있습니다.

$month=1;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;

출력 : 1 월


0
$days = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
$month = ( date('m') < 10 ) ? date('m')[1] : date('m');

그것은 달을 추출합니다.


-3

다음과 같은 기본 함수를 사용하십시오 jdmonthname().

echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);

jdmonthname(3, CAL_MONTH_GREGORIAN_LONG);반환November
Onimusha 2014 년

jdmonthname ()은 천문학에서 사용되는 증분 일 수인 Julian DAY를 예상합니다. 0 일은 BC 4713 년 1 월 1 일, 1 일은 BC 4713 년 1 월 2 일이었습니다. 2014 년 10 월 20 일 (그레고리력 날짜)은 율리우스 력 2456951 일 (율리우스 력 날짜는 2014 년 10 월 7 일)입니다. 이상하게도 PHP가 0 줄리안 데이를 제대로 처리하지 못하는 것 같습니다 : echo jdtojulian (0). "<br/>"; echo jdtojulian (1). "<br/>"; echo jdtojulian (2). "<br/>"; 반환 : 0/0/0 1 / 2 / -4713 1 / 3 / -4713
George Langley

-3

SQL에서 monthname () 함수를 사용할 수 있습니다.

월 이름 (날짜 _ 열)별로 테이블 그룹에서 월 이름 (날짜 _ 열) 선택


1.) SQL이 아닌 PHP가 요청되었습니다. 2.) 귀하의 대답은 일반적인 SQL이 아닌 MySQL 특정인 것 같습니다.
martti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.