Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rpmartins

Diminuir 1 dia na data com formato aaaa-mm-dd

Recommended Posts

Alaerte, desta forma, se ele rodar isso no dia 1/1/2009, não vai aparecer 31/12/2008 sacou???

 

 

use assim:

 

$ontem = date("Y-m-d", mktime(0,0,0, date("m"), date("d")-1, date("y")));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alaerte, desta forma, se ele rodar isso no dia 1/1/2009, não vai aparecer 31/12/2008 sacou???

Vixi, é verdade nem reparei... valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizando o exemplo:

 

echo date("".$_POST["ano"]."-".$_POST["mes"]."-$dia", mktime(0,0,0, date("m"), date("d")-1, date("y")));

 

o resultado foi: 2008-05-31

 

No exemplo:

 

echo date("".$_POST["ano"]."-".$_POST["mes"]."-$dia", strtotime("-1 day"));

 

o resultado foi: 2008-05-31

 

Na situação, eu tenho um loop onde $dia irá incrementando conforme os números do mes consultado, por exemplo, a pessoa quer listar um extrato do caixa do mês de maio/2008, a rotina consiste em pegar a quantidade de dias neste mes/ano e lista os valores em cada linha da tabela, acontece que na listagem deve aparecer o saldo inicial do dia, este consiste em ser o caixa do dia anterior, aí que entra a necessidade de pegar o dia anterior.

 

Ainda nao consegui descobrir o porque de só aparecer o dia 31/05/2008.

 

Os exemplos que me passaram funciona corretamente, porém quando monto a data com o $_POST fica com esse valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando $_POST:

 

$diaanterior = date("Y-m-d", mktime(0,0,0, (int)$_POST['mes'], -1, (int)$_POST['ano']));

Isso vai mostrar o último dia do mês anterior ao mês inserido pelo usuário...

 

Se ele colocar Abril de 2008, vai mostrar 2009-03-31.

Se ele colocar Março de 2008, vai mostrar 2009-02-28.

 

E assim por diante...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não foi dessa vez, o retorno está exibindo 2008-04-29

 

Vou sintetizar o código que estou utilizando:

 

// pego a qtde de dias que tem no mes para orientar o FOR
$diasdomes = cal_days_in_month(CAL_GREGORIAN, $_POST["mes"], $_POST["ano"]);
	  
for ($i=1; $i <= $diasdomes; $i++) {
		  
  // Verificando se o dia tem apenas 1 dígito
  if ($i <= 9) {
	$dia = "0$i";
  } else {
	$dia = $i;
  }

echo "Dia atual: ".$_POST["ano"]."-".$_POST["mes"]."-$dia <br />";

}

O que eu preciso basicamente seria isso

 

echo "Dia atual: ".$_POST["ano"]."-".$_POST["mes"]."-$dia / Dia anterior (DIA ANTERIOR)<br />";

Assim no mysql eu conseguiria pegar as informacoes do caixa anterior para exibir como saldo inicial

 

Basicamente a tabela mostra isso:

 

DATA | SALDO_INICIAL | RECEITA | DESPESA | SALDO_FINAL

 

Funciona todas as colunas com exceção da SALDO_INICIAL que é onde devo pegar com uma consulta no mysql.

 

Para entender melhor, a coluna SALDO_INICIAL do dia 2008-06-03 é o SALDO_FINAL de 2008-06-02

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO...

 

Fiz da seguinte forma usando o conceito inicial que o Marcelo Sabdini indicou

 

$ontem = date("Y-m-d", mktime(0,0,0, date("m"), date("d")-1, date("y")));

Funcionou o abaixo

 

$dia2 = mktime (0, 0, 0, date("".$_POST['mes']."")  , date("$dia")-1, date("".$_POST['ano'].""));
$dia_anterior = date('Y-m-d', $dia2);

Obrigado pela ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... Não precisa colocar esses valores dentro da função date().. Pode fazer assim:

$dia2 = mktime (0, 0, 0, $_POST['mes'], $dia-1, $_POST['ano']);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto mais simplificado melhor :)

Tome cuidado com estas práticas: o PHP possui funções pra manipular datas, e manipular datas usando funções inidequadas é muito sucetível a falhas. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.