Преобразование числа в месяц в PHP

У меня есть этот код PHP:

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

echo $monthName;

Но он возвращает December, а не August.

$result["month"] равно 8, поэтому функция sprintf добавляет 0, чтобы сделать ее 08.

Ответ 1

Рекомендуемый способ сделать это:

В настоящее время вы действительно должны использовать объекты DateTime для любой математики даты/времени. Это требует наличия PHP-версии >= 5.2. Как показано в Glavić answer, вы можете использовать следующее:

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

! символ форматирования используется для reset для Unix epoch. Символом m format является числовое представление месяца с ведущими нулями.

Альтернативное решение:

Если вы используете более старую версию PHP и не можете обновить ее сейчас, вы можете это решение. Второй параметр функции date() принимает метку времени, и вы можете использовать mktime(), чтобы создать его, например:

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

Если вам понадобится имя месяца с 3-мя символами, например Mar, измените F на m. Список всех доступных опций форматирования можно найти в справочной документации по PHP.

Ответ 2

Просто потому, что все используют функции strtotime() и date(), я покажу DateTime пример:

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

Ответ 3

Используйте mktime():

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

См. руководство по PHP: http://php.net/mktime

Ответ 4

strtotime ожидает стандартный формат даты и возвращает отметку времени.

Кажется, вы передаете strtotime одну цифру для вывода формата даты.

Вы должны использовать mktime, который принимает элементы даты как параметры.

Ваш полный код:

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

echo $monthName;

Однако функция mktime не требует начального нуля номера месяца, поэтому первая строка совершенно не нужна, и $result["month"] можно передать прямо в функцию.

Затем все можно объединить в одну строку, повторяя дату в строке.

Ваш реорганизованный код:

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

...

Ответ 5

Чтобы выполнить преобразование в отношении текущей локали, вы можете использовать функцию strftime:

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

date не уважает локаль, strftime делает.

Ответ 6

Если вам просто нужен массив имен месяцев с начала года до конца, например. для заполнения раскрывающегося списка, я просто использовал бы следующее:

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

Ответ 7

Если у вас есть номер месяца, вы можете сначала создать дату из него с датой по умолчанию 1-го и по умолчанию года текущего года, а затем извлечь имя месяца с созданной даты:

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

Этот код предполагает, что у вас есть номер месяца, хранящийся в $i

Надеюсь, это поможет кому-то

Ответ 8

Есть много способов напечатать месяц с заданного номера. Выберите один номер для вас.

1. функция date() вместе с параметром 'F'

Пример кода:

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

2. Создавая объект php date с помощью createFromFormat()

Пример кода

$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

Ответ 10

при необходимости адаптироваться

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

Ответ 11

Это тривиально легко, почему так много людей делают такие плохие предложения? @Bora был самым близким, но это самый надежный

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

это способ сделать это

Ответ 12

В настоящее время мы используем нижеприведенное решение для решения одной и той же проблемы:

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

Чтобы узнать больше о наборе locale, перейдите в http://php.net/manual/en/function.setlocale.php

Чтобы узнать больше о strftime, перейдите в http://php.net/manual/en/function.strftime.php

Ucfirst() используется для заглавной буквы первой строки в строке.

Ответ 13

Только одна строка

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

Ответ 14

Вам нужно задать поля с strtotime или mktime

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

С mktime установите только месяц. Попробуйте следующее:

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

Ответ 15

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

используйте приведенный выше код

Ответ 16

<?php
$month =1;
$convert =DateTime::createFromFormat('!m', $month);
echo $convert->format('F');
?>

Ответ 17

Я думаю, что использование 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()

Ответ 18

Использование:

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

Ответ 19

Я знаю, что этот вопрос был задан некоторое время назад, но я решил, что все, кто ищет этот ответ, вероятно, просто пытаются избежать написания всех if/else-заявлений, поэтому я написал его для вас, чтобы вы могли скопировать/вставить, Единственное предостережение с этой функцией заключается в том, что оно идет на фактическое число месяца, а не на 0-индексированное число, поэтому январь = 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";
    }
}

Ответ 20

Это для всех нужд преобразования даты и времени

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

Ответ 21

Чтобы получить название месяца, указав номер месяца

$ month_number = 5;

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

Где "F" вернет вам название месяца, например. 'Май'

Ответ 22

Вот как я это сделал

// 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

Ответ 23

Вы можете просто использовать функцию monthname() в SQL.

ВЫБЕРИТЕ имя месяца (date_column) из группы таблиц по названию месяца (date_column)

Ответ 24

для php 7.1

 $monthyear= date("M Y");

Ответ 25

Используйте встроенную функцию, такую ​​как jdmonthname():

echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);