Ir para conteúdo

Arquivado

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

Vinicius Cainelli

[Resolvido] Obter data subtraindo 1 mês.

Recommended Posts

Galera, alguem pode me ajudar...

 

Seguinte, eu preciso obter uma data com 1 mes antes da data que tenho.. assim, eu pego o ultimo registro da tabela e seleciono a data dele.. que por exemplo é 2011-09, eu preciso de uma função que faça um cálculo para me mostrar o mes anterior, no caso 2011-08.. e que quando chegar em 2012-01, me mostre 2011-12.. ( to falando isso pq já vi gente indicando fazer o mes -1, só que isso não funciona..

 

Eu sei que a base é essa função aqui

 

strftime('%Y-%m', strtotime('-1 Month'));

 

Eu só não to sabendo aplicar a data que eu tenho pra poder fazer o calculo.. que no caso essa dai pega a data atual, a de hoje mesmo.. faz o calculo e mostra a do mes anterior, só que eu quero fazer isso com uma data que tenho do banco..

Compartilhar este post


Link para o post
Compartilhar em outros sites

N seria isso?

 

$mes = date(m);

if($mes>1){

$mes = $mes - 1;

}else{


$mes = 12;

}


switch ($mes){

case 1: $mes = "JAN"; break;
case 2: $mes = "FEV"; break;
case 3: $mes = "MAR"; break;
case 4: $mes = "ABR"; break;
case 5: $mes = "MAI"; break;
case 6: $mes = "JUN"; break;
case 7: $mes = "JUL"; break;
case 8: $mes = "AGO"; break;
case 9: $mes = "SET"; break;
case 10: $mes = "OUT"; break;
case 11: $mes = "NOV"; break;
case 12: $mes = "DEZ"; break;

}

 

Haaa, você só usa o switch se quiser colocar por extenso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na vdd não é nenhum desses 2, eu só quero pegar o mes e o ano, o ano não importa muito... o q eu quero é pegar a ultima data que tenho cadastrada no banco, e fazer um calculo para obter a data de um mes atras.. Assim

 

Se a ultima do banco for: 2011-09-28, o que importa pra mim é só o 2011-09.

Ai eu preciso fazer um calculo pra ter 2011-08..

 

 

Se a ultima do banco for: 2011-05-12, o que importa pra mim é só o 2011-05.

Ai eu preciso fazer um calculo pra ter 2011-04..

 

 

Se a ultima do banco for: 2011-01-30, o que importa pra mim é só o 2011-01.

Ai eu preciso fazer um calculo pra ter 2010-12..

 

Eu só preciso do mes e do ano anterior ao da data que tenho guardada na variavel. só isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok amigão, mas vamos especificar, você quer substituir os cadastros do banco por 1 mês a menos ou exibir num website com 1 mês a menos?

 

Se é um calculo para exibir no website você deve fazer o seguinte

 

1-Separar a string após o quinto caractere e pegar os outros dois digitos(2011-)(05).

2-Guarda os dois dados em variáveis separadas

3-Subtrair 1 do mês caso for maior que 1 e se não for maior que 1 você substitui por 12. (meu codigo ali em cima)

4-Concatenar as duas variáveis (ex. $data = $ano . $mes // o ponto concatena as variáveis)

5-Exibe $data

fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

E preciso fazer essa volta toda? Pq pensei que tivesse uma forma de "adaptar" esse script:

 

strftime('%Y-%m', strtotime('-1 Month'));

 

Pq isso aqui mostra mais ou menos o q quero.. só q mostra somente com a data atual, por causa do date. Seria mais ou menos substituir o '%Y-%m', pela data que quero tirar o mes, só que já tentei fazer isso e não funcionou.

 

Não sei se você me entendeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

sei n cara, na verdade essa volta toda que coloquei são umas 3 linhas de código só (mais o calculo do menos 1) deve ter uma função pra isso sim mas eu n manjo.... tmb to aprendendo hueuheuhe http://php.net/manual/pt_BR/function.strftime.php

a comu tah meio parada hoje, mas amanha com certeza algum dos modera te ajuda com mais precisão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uAsuhasu.. ah entao beleza.. valeu pela ajuda... e dei uma lida no manual tb antes de postar.. mas nao consegui mto sucesso.. mas vlw msm assim.. vou esperar algum modera ajuda aq.. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

function subtraiMeses($data, $nmeses) {
    $year = substr ($data, 0, 4);
    $month = substr ($data, 4, 2);
    $day =  substr ($data, 6, 2);
    $antdata = mktime (0, 0, 0, $month - $nmeses, $day, $year);
    return strftime("%Y%m%d", $antdata);
}

 

usa essa função ai...os parametros sao obvios:

a data (no formato yyyy-mm-dd) e o numero de meses que quer subtrair.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, é isso? Pq se for, teoricamente ele deveria me mostrar a data com o mes subtraido, no caso 2011-03

 

$data = 2011-04;
$nmeses = 1;

function subtraiMeses($data, $nmeses) {
    $year = substr ($data, 0, 4);
    $month = substr ($data, 4, 2);
    $day =  substr ($data, 6, 2);
    $antdata = mktime (0, 0, 0, $month - $nmeses, $day, $year);
    return strftime("%Y%m%d", $antdata);
}

subtraiMeses();

Compartilhar este post


Link para o post
Compartilhar em outros sites

então faça assim:

 

function subtraiMeses($data, $nmeses) {
    $year = substr ($data, 0, 4);
    $month = substr ($data, 4, 2);
    $day =  substr ($data, 6, 2);
    $antdata = mktime (0, 0, 0, $month - $nmeses, $day, $year);
    return strftime("%Y-%m", $antdata);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo resultado..

 

Warning: Missing argument 1 for subtraiMeses(), called in clc-fiex.php on line 15 and defined in clc-fiex.php on line 7

Warning: Missing argument 2 for subtraiMeses(), called in clc-fiex.php on line 15 and defined in clc-fiex.php on line 7

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você vai pegar a data do banco de dados, não precisa fazer isso em PHP.

 

Faça direto no SQL

SELECT DATE_FORMAT( ADDDATE( NOW( ) , INTERVAL - 1 MONTH ) , '%Y-%m' );
# Saída: 2011-09

 

DATE_FORMAT :seta: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

ADDDATE :seta: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_adddate

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão não é pegar do banco.. vou simplificar.. o que preciso é subtrair um mês de uma data qualquer que tenho guardado em uma variavel.

 

Assim:

 

$DataAtual = 2011-05;

 

E com alguma função, fazer ela ficar assim

 

$DataNova = 2011-04;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então brother.. esse código eu tinha, pode ver, logo no começo.. o problema é q ele só funciona com a data de hoje, e eu não quero isso.. quero colocar uma data qualquer.. sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, é o melhor a se fazer, por que digamos que tu tenha vários registros, se tu fosse fazer no php, tu teria de fazer um loop, separar individualmente cada um para que tu saiba depois de quem é o que, pelo SQL fica tudo na query...

 

muito melhor.

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.