web-dev-qa-db-ja.com

PHP内の数字を月名に変換

私はこのPHPコードを持っています:

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

echo $monthName;

しかし、DecemberではなくAugustを返しています。

$result["month"]は8に等しいので、sprintf関数は0にするために08を追加しています。

127
user2710234

これを行うための推奨される方法:

今日では、日付/時刻の計算にはDateTimeオブジェクトを使うべきです。これにはPHP version> = 5.2が必要です。 Glavićの答え に示すように、あなたは以下を使うことができます。

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

!フォーマット文字 は、すべてを Unixエポック にリセットするために使用されます。 mフォーマット文字は月の数値表現で、先行ゼロが付きます。

代替案:

古いPHPバージョンを使用していて、現時点ではアップグレードできない場合は、このソリューションを使用できます。 date() 関数の2番目のパラメータはタイムスタンプを受け入れます。そして、次のように作成するために mktime() を使用できます。

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

3文字の月名をMarのようにしたい場合は、FMに変更します。利用可能なすべてのフォーマットオプションのリストは PHPマニュアルドキュメント にあります。

309
Amal Murali

みんながstrtotime()とdate()関数を使っているからといって、 DateTime の例を示します。

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

mktime()を使う:

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

PHPマニュアルを参照してください。 http://php.net/mktime

25
mintedsky

strtotime は標準の日付フォーマットを要求し、タイムスタンプを返します。

あなたは strtotime から日付フォーマットを出力するために1桁を渡しているようです。

あなたはパラメータとして日付要素をとる mktime を使うべきです。

あなたのフルコード:

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

echo $monthName;

しかし、mktime関数は月数の先頭にゼロを必要としないため、最初の行はまったく不要で、$result["month"]を直接関数に渡すことができます。

これをすべて1行にまとめて、日付をインラインで表示することができます。

あなたのリファクタリングされたコード:

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

...

18
Greg

現在のロケールに関して変換を行うには、strftime関数を使用できます。

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

dateはロケールを尊重しません、strftimeは尊重します。

16
Dereckson

年の初めから終わりまでの月名の配列がほしい場合は、ドロップダウン選択を作成するには、以下を使用します。

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

月番号がある場合は、最初にデフォルトの日付が1日で、デフォルトの年が現在の年である日付を作成してから、作成した日付から月の名前を抽出します。

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

このコードでは、月番号が$ iに格納されていると仮定しています。

これが誰かに役立つことを願っています

3
Bryan Itur
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));

私はこれを見つけた https://css-tricks.com/snippets/php/change-month-number-to-month-name/ そしてそれ完璧に働いた。

3
Matthew Park

必要に応じて調整する

$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];
2
zzapper

これは簡単なことですが、なぜそんなに多くの人々がそのような悪い提案をしているのでしょうか。 @Boraが一番近いですが、これが最も堅牢です

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

これはそれを行う方法です

2
Mr Heelis

現在、同じ問題に取り組むために以下の解決策を使用しています。

//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()は文字列の最初の文字を大文字にするのに使われます。

2
date("F", strtotime($result["month"]))

上記のコードを使用

1

与えられた番号から月を印刷する方法はいくつかあります。ここにいくつかあります

1。 date()関数とパラメータ 'F'

コード例:

$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
1
Nishad Up

strtotimeまたはmktimeを使ってフィールドを設定する必要があります。

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

mktimeは月だけを設定します。これを試してください。

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

たった1行

DateTime::createFromFormat('!m', $salary->month)->format('F'); //April
1

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
boomx09

つかいます:

$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);
0
temuri

これは、日時変換のすべてのニーズに対応します。

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

pHP 7.1の場合

 $monthyear= date("M Y");
0
shivakumar hk

月番号を指定して月名を取得するには

$ month_number = 5;

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

「F」は月の名前を返します。 「5月」

0
Bijendra Sahu

私はこの質問がしばらく前に尋ねられたことを知っています、しかし私はこの答えを探している誰もがおそらく単にif/else文全体を書き出すのを避けようとしていると考えました。この関数の唯一の注意点は、0から始まるインデックスではなく、月の実際の数字になることです。したがって、January = 1ではなく、0です。

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";
    }
}
0
Freaky Turtle

SQLではmonthname()関数を使用することができます。

月名(date_column)によるテーブルグループからのSELECT月名(date_column)

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
Vicky Salunkhe
<?php
$month =1;
$convert =DateTime::createFromFormat('!m', $month);
echo $convert->format('F');
?>
0