Pergunta

Estou tendo um problema simples com mktime.Estou encontrando o seguinte código:

echo date("Y-M-d", mktime(11, 45, 0, 01, 05, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 06, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 07, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 08, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 01, 09, 2014)); echo ", ";

está produzindo a seguinte saída:

2014-Jan-05, 2014-Jan-06, 2014-Jan-07, 2013-Dec-31, 2013-Dec-31

A função de data existe apenas para torná-la mais legível;os carimbos de data e hora retornados pelo mktime estão errados.O apenas a coisa que muda é o dia do mês, então não sei por que haveria uma descontinuidade entre os dias 7 e 8, ou por que tanto o 8 quanto o 9 retornam no mesmo dia.

Verifiquei se a hora, o minuto e o segundo não alteram o resultado do dia errado, embora alterem o carimbo de data/hora exato.Ou seja, as duas últimas linhas acima retornam exatamente o mesmo carimbo de data/hora (1388508300), mas se eu alterar a hora, a mudança relativa no carimbo de data/hora será a esperada.

Caso o contexto seja importante, isso está sendo executado no PHP 5.3 dentro de uma instalação do WordPress.

Foi útil?

Solução

Literais inteiros começando com 0.. estão dentro octal notação. 08 em octal ou superior não existe, você está obtendo valores totalmente errados.O valor pois o quinto dia é 5, não 05 e assim por diante.

Outras dicas

Livre-se dos zeros iniciais antes dos seus dias (e meses)

echo date("Y-M-d", mktime(11, 45, 0, 1, 5, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 6, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 7, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 8, 2014)); echo ", ";
echo date("Y-M-d", mktime(11, 45, 0, 1, 9, 2014)); echo ", ";

Veja-o em ação

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top