У меня есть этот код PHP:
$monthNum = sprintf("%02s", $result["month"]); $monthName = date("F", strtotime($monthNum)); echo $monthName;
Но он возвращается в December
а не в August
.
$result["month"]
равно 8, поэтому функция sprintf
добавляет 0
чтобы сделать ее 08
.
Рекомендуемый способ сделать это:
В настоящее время вы действительно должны использовать объекты DateTime для любой математики даты / времени. Это требует наличия PHP-версии> = 5.2. Как показано в ответе Главича , вы можете использовать следующее:
$monthNum = 3; $dateObj = DateTime::createFromFormat('!m', $monthNum); $monthName = $dateObj->format('F'); // March
!
символ форматирования используется для сброса всех значений в эпоху Unix . Символ m
– это числовое представление месяца с начальными нулями.
Альтернативное решение:
Если вы используете более старую версию PHP и не можете обновить ее на данный момент, вы можете это решение. Второй параметр функции date()
принимает временную метку, и вы можете использовать mktime()
для ее создания, например:
$monthNum = 3; $monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March
Если вы хотите использовать трехмесячное название месяца, например 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
времени.
Кажется, вы передаете 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));
…
Чтобы выполнить преобразование в отношении текущей локали, вы можете использовать функцию strtotime
:
setlocale(LC_TIME, 'fr_FR.UTF-8'); $monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));
date
не соответствует языку, strtotime
делает.
при необходимости адаптироваться
$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];
Вам нужно задать поля с strtotime
или mktime
echo date("F", strtotime('00-'.$result["month"].'-01'));
С mktime
установите только месяц. Попробуй это:
echo date("F", mktime(0, 0, 0, $result["month"], 1));
Если вам просто нужен массив имен месяцев с начала года до конца, например, чтобы заполнить раскрывающийся список, я просто использовал бы следующее:
for ($i = 0; $i < 12; ++$i) { $months[$m] = $m = date("F", strtotime("January +$i months")); }
date("F", strtotime($result["month"]))
используйте приведенный выше код
это тривиально легко, почему так много людей делают такие плохие предложения? @Bora был самым близким, но это самый надежный
/*** * returns the month in words for a given month number */ date("F", strtotime(date("Y")."-".$month."-01"));
это способ сделать это
Если у вас есть номер месяца, вы можете сначала создать дату из него с датой по умолчанию 1-го и по умолчанию года текущего года, а затем извлечь имя месяца с созданной даты:
echo date("F", strtotime(date("Y") ."-". $i ."-01"))
Этот код предполагает, что у вас есть номер месяца, хранящийся в $ i
Надеюсь, это поможет кому-то
Я думаю, что использование 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 ()
Использование:
$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"; } }
В настоящее время я использую решение ниже для решения той же проблемы:
//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()
используется для заглавной буквы первой строки в строке.
$monthNum = 5; $monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
Я нашел это на https://css-tricks.com/snippets/php/change-month-number-to-month-name/, и он отлично работал.
Используйте встроенную функцию, такую как jdmonthname()
:
echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);