Eu tenho este código PHP:
$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));
echo $monthName;
Mas está voltando December
antes August
.
$result["month"]
é igual a 8, então a sprintf
função está adicionando a 0
para torná-lo 08
.
strtotime
, não tem idéia do que você está tentando fazer. Como alternativa, basta usar uma opção para algo assim.strtotime
não tem idéia do que "8" significa.strtotime
analisa timestamps completos como "2012-05-12 08:43:12". O que "8" significa neste contexto?echo date( "F", time() );
:? Por exemplo,echo date( "F", strtotime("2019-03-09") );
a saída será "March"Respostas:
A maneira recomendada de fazer isso:
Atualmente, você realmente deve usar objetos DateTime para qualquer matemática de data / hora. Isso requer que você tenha uma versão PHP> = 5.2. Conforme mostrado na resposta de Glavić , você pode usar o seguinte:
O
!
caractere de formatação é usado para redefinir tudo para a época do Unix . Om
caractere de formato é a representação numérica de um mês, com zeros à esquerda.Solução alternativa:
Se você estiver usando uma versão mais antiga do PHP e não puder atualizar no momento, poderá usar esta solução. O segundo parâmetro da
date()
função aceita um registro de data e hora e você pode usarmktime()
para criar um, assim:Se você quiser o nome do mês com três letras
Mar
, mudeF
paraM
. A lista de todas as opções de formatação disponíveis pode ser encontrada na documentação do manual do PHP .fonte
Só porque todo mundo está usando as funções strtotime () e date (), mostrarei o exemplo DateTime :
fonte
DateTime::createFromFormat('m|', $result['month']);
redefinir apenas os campos ausentes.strftime()
para isso.Use
mktime()
:Veja o manual do PHP: http://php.net/mktime
fonte
"m"
ele retornará o mês como um número de 2 dígitos como astring
. por exemplo, janeiro = 01, fevereiro = 02strtotime
espera um formato de data padrão e transmite um carimbo de data e hora.Você parece estar passando
strtotime
um único dígito para gerar um formato de data.Você deve usar o
mktime
que leva os elementos de data como parâmetros.Seu código completo:
No entanto, a função mktime não requer um zero inicial para o número do mês, portanto, a primeira linha é completamente desnecessária e
$result["month"]
pode ser passada diretamente para a função.Tudo isso pode ser combinado em uma única linha, ecoando a data em linha.
Seu código refatorado:
...
fonte
date("F", mktime(null, null, null, 2));
retorna emMarch
vez deFebruary
.mktime
usará o dia atual. Hoje é dia 31. O que é o 31 de fevereiro? :)1
não está sendo fornecido como 5 parâmetro paramktime
mas como 3ª parâmetro paradate
resultados que não produziria esperadosPara fazer a conversão em relação à localidade atual, você pode usar a
strftime
função:date
não respeita a localidade,strftime
faz.fonte
$monthName = utf8_encode(strftime('%B', mktime(0, 0, 0, $monthNumber)));
para exibir caracteres acentuados como em 'Août'Se você deseja apenas uma matriz de nomes de meses do início ao ano, por exemplo, para preencher uma seleção suspensa, eu usaria o seguinte;
fonte
Existem várias maneiras de imprimir um mês a partir do número fornecido. Escolha uma suíte para você.
1. função date () junto com o parâmetro 'F'
Exemplo de código:
2. Criando o objeto php date usando createFromFormat ()
Exemplo de código
3. função strtotime ()
4. função mktime ()
5. Usando jdmonthname ()
fonte
adaptar conforme necessário
fonte
Se você tiver o número do mês, poderá criar uma data a partir dele com uma data padrão do 1º e ano padrão do ano atual e extrair o nome do mês da data criada:
Este código pressupõe que você tenha o número do seu mês armazenado em $ i
Espero que isso ajude alguém
fonte
Encontrei isso em https://css-tricks.com/snippets/php/change-month-number-to-month-name/ e funcionou perfeitamente.
fonte
isso é trivialmente fácil, por que tantas pessoas estão fazendo sugestões tão ruins? @Bora foi o mais próximo, mas este é o mais robusto
É assim que se faz
fonte
Atualmente, estou usando a solução abaixo para resolver o mesmo problema:
Para ler mais sobre o conjunto de códigos de idioma, acesse http://php.net/manual/en/function.setlocale.php
Para saber mais sobre o strftime, acesse http://php.net/manual/en/function.strftime.php
Ucfirst()
é usado para colocar em maiúscula a primeira letra em uma sequência.fonte
fonte
Você precisa definir campos com
strtotime
oumktime
Com
mktime
set apenas mês. Tente este:fonte
use o código acima
fonte
Isso para todas as necessidades de conversão de data e hora
fonte
fonte
Eu acho que usar cal_info () é a maneira mais fácil de converter de número para string.
Veja os documentos para cal_info ()
fonte
Usar:
fonte
gregoriantojd
ejdmonthname
estão na extensão do calendário e exigem a compilação do PHP, a--enable-calendar
menos que você esteja no Windows.Eu sei que essa pergunta foi feita há um tempo, mas imaginei que todos que procuravam essa resposta provavelmente tentavam evitar escrever todas as instruções if / else, por isso escrevi para você para que você possa copiar / colar. A única ressalva com esta função é que ela continua no número real do mês, não no número indexado 0, então janeiro = 1, não 0.
fonte
Para obter o nome do mês fornecendo o número do mês
Onde 'F' retornará o nome do mês, por exemplo. 'Posso'
fonte
Foi assim que eu fiz
retorna
30 June 2019
fonte
Um truque simples aqui, você pode usar a função strtotime () viável conforme sua necessidade, um número de conversão para o nome do mês.
1.Se você deseja um resultado em janeiro, fevereiro e março, tente abaixo de um com o 'M' como parâmetro dentro da data.
Saída: maio
/ 2 Você pode tentar com o 'F' em vez de 'M' para obter o nome completo do mês como uma saída janeiro fevereiro março etc.
Saída: janeiro
fonte
Isso extrai os meses.
fonte
Use uma função nativa como
jdmonthname()
:fonte
jdmonthname(3, CAL_MONTH_GREGORIAN_LONG);
retornaNovember
Você pode apenas usar a função monthname () no SQL.
SELECT monthname (date_column) do grupo de tabelas por monthname (date_column)
fonte