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



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



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

echo $monthName;


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



$result["month"] равно 8, так что

720   18  

18 ответов:

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

в настоящее время вы действительно должны использовать объекты DateTime для любой даты/времени math. Для этого необходимо иметь версию PHP >= 5.2. Как показано в Glavić это!--15-->, вы можете использовать следующее:

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

The ! форматирование символов используется для сброса всего в эпохи Unix. Элемент m формат символа-это числовое представление месяца, с ведущими нулями.

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

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

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

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

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

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

использовать mktime():

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

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

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

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

вы должны использовать mktime которая принимает даты в качестве параметров.

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

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

echo $monthName;

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

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

ваш рефакторинг кода:

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

...

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

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

date не уважает язык, strftime делает.

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

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

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

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

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

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

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

Я нашел это на https://css-tricks.com/snippets/php/change-month-number-to-month-name/ и это сработало отлично.

вам нужно установить поля с strtotime или mktime

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

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

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

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

$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];
date("F", strtotime($result["month"]))

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

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

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

это так

В настоящее время я использую решение НИЖЕ, чтобы решить ту же проблему:

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

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

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

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

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

посмотреть docs for cal_info ()

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

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

Я знаю, что этот вопрос был задан некоторое время назад, но я понял, что все, кто ищет этот ответ, вероятно, просто пытаются избежать написания всего заявления 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";
    }
}

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

выберите monthname(date_column) из группы таблиц по monthname (date_column)

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

echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);

Comments

    Ничего не найдено.