Преобразование числа в месяц в 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
Ответ 9
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
Я нашел это на https://css-tricks.com/snippets/php/change-month-number-to-month-name/, и он отлично работал.
Ответ 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);