Ir para conteúdo

POWERED BY:

Arquivado

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

Biel.

exibir na tela na ordem crescente todos os meses do ano

Recommended Posts

Bom dia a todos. Direto ao ponto. Pessoal o EX 1 abaixo exibe na tela 2016 ate 2030
Gostaria que o EX 2 exibisse na tela na ordem crescente todos os meses do ano assim
janeiro
fevereiro
março
abril
maio
junho
julho
agosto
setembro
outubro
novembro
dezembro
EX 1
<?php
$final = '2030';
for($inicio = '2016'; $inicio <= $final; $inicio++){
	echo $inicio.'<br />';
	}
?>

EX 2

<?php
$final = '';
for($inicio = ''; $inicio <= $final; $inicio++){
	echo $inicio.'<br />';
	}
?>
<?php 
$mes   = date("n");
$meses = array( "janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"); 
echo  '<h1>'.$meses[$mes].'</h1>';
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a lógica. Você quer todos os meses desde 2016 até 2030. Mas quer que os meses sejam em "ordem". Primeiro todos os janeiros, depois todos os fevereiros.

Ou seja, passe primeiro os anos e depois os meses:

$date = \DateTime::createFromFormat('d' , '01');// Vai pegar o ano e mês atuais no dia primeiro.

$datePeriod = new \DatePeriod($date, new \DateInterval('P1Y') , new \DateTime('2030-12-31'));

foreach($datePeriod as $date)
{
    echo $date->format('m');
}

Agora, adicione a exibição dos meses em um laço de repetição para que calcule o próximo mês até o ano 2030:

do
{
   /** 
     código de cálculos dos meses até 2030
    **/

   $date->add(new \DateInterval('P1M')); // adiciona um mês a data
} while (/** condição para término **/);



E, por último, mas não menos importante, quando for dezembro, se adicionar um novo mês, ele vai para janeiro do ano seguinte. Então valide se o ano não é maior que o ano atual:

$lastDayOfCurrentYear = new \DateTime('last day of year');

E a bibliteca DateTime permite validação strict:

$date <= $lastDayOfCurrentYear;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel Heming, não quero todos os meses desde 2016 até 2030 .

Gostaria que exibisse na tela na ordem crescente os meses de janeiro a dezembro, nada mais. Assim

janeiro
fevereiro
março
abril
maio
junho
julho
agosto
setembro
outubro
novembro
dezembro

Compartilhar este post


Link para o post
Compartilhar em outros sites

A lógica continua a mesma, qual a sua dificuldade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que agora vou explicar melhor . Valos lá:

O EX a abaixo exibe na tela na ordem crescente de janeiro até dezembro

Gostaria de saber se tem como obter o mesmo resultado do exemplo EX a resumindo o código, sem precisar criar tantas variáveis. Achei que usando FOR ou WHILE dava pra fazer.

Nota: Assim não serve. Achei que usando FOR ou WHILE dava pra fazer

<?php
$variavel = 'janeiro'. '<br />'.
            'fevereiro' . '<br />' . 
	    'março' . '<br />' . 
	    'abril'.'<br />' .
	    'maio'.'<br />'.
	    'junho'.'<br />'.
	    'julho'.'<br />'.
	    'agosto'.'<br />'.
	    'setembro'.'<br />'.
	    'outubro'.'<br />'.
	    'novembro'.'<br />'.
	   'dezembro'.'<br />';
echo $variavel
?>

EX a

<?php
$janeiro = 'janeiro'.'<br />';
$fevereiro = 'fevereiro'.'<br />';
$março = 'março'.'<br />';
$abril = 'abril'.'<br />';
$maio = 'maio'.'<br />';
$junho = 'junho'.'<br />';
$julho = 'julho'.'<br />';
$agosto = 'agosto'.'<br />';
$setembro = 'setembro'.'<br />';
$outubro = 'outubro'.'<br />';
$novembro = 'novembro'.'<br />';
$dezembro = 'dezembro'.'<br />';
echo $janeiro.$fevereiro.$março.$abril.$maio.$junho.$agosto.$setembro.$outubro.$novembro.$dezembro;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando strftime() juntamente com setlocale() você obtém o nome do mês em pt-br. Só precisará um loop de 1 a 12 e um echo dentro dele :)

Beraldo o que eu quero fazer é isso:

Se eu digitar qualquer mes de janeiro a dezembro no campo input abaixo, vai cortar, essa é a idéia impedir de cadastrar. Achei que usando FOR ou WHILE dava pra fazer
Gostaria de saber se tem como obter o mesmo resultado do EX 1 abaixo sem precisar repetir a $ano 12 vezes
EX 1
<input type="text" name="ano" value="" />
<?php 
$ano              = $_POST['ano']; 
$ano              = str_replace("janeiro"   , "" , $ano);
$ano              = str_replace("fevereiro" , "" , $ano);
$ano              = str_replace("março"     , "" , $ano); 
$ano              = str_replace("abril"	    , "" , $ano);
$ano              = str_replace("maio"	    , "" , $ano);
$ano              = str_replace("junho"	    , "" , $ano);
$ano              = str_replace("julho"	    , "" , $ano);
$ano              = str_replace("agosto"    , "" , $ano);
$ano              = str_replace("setembro"  , "" , $ano);
$ano              = str_replace("outubro"   , "" , $ano);
$ano              = str_replace("novembro"  , "" , $ano);
$ano              = str_replace("dezembro"  , "" , $ano);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A cada post sua dúvida fica mais obscura... :unsure:

Se você fizer todos esses str_replace, você vai apagar os meses da string.

É melhor você reformular (mais uma vez) sua dúvida e esclarecer exatamente qual é o seu objetivo

Compartilhar este post


Link para o post
Compartilhar em outros sites

A cada post sua dúvida fica mais obscura... :unsure:

Se você fizer todos esses str_replace, você vai apagar os meses da string.

É melhor você reformular (mais uma vez) sua dúvida e esclarecer exatamente qual é o seu objetivo

Beraldo essa é a ideia mesmo apagar os meses da string.

A cada post sua dúvida fica mais obscura... :unsure:

Se você fizer todos esses str_replace, você vai apagar os meses da string.

É melhor você reformular (mais uma vez) sua dúvida e esclarecer exatamente qual é o seu objetivo

Beraldo, o exemplo abaixo, se eu digitar no input qualquer ano de 2016 ate 2030 vai cortar, essa é a ideia cortar mesmo.

Quero fazer a mesma coisa com mes de janeiro a dezembro usando for ou while ou do while

<input type="text" name="mes" value="" />

$mes              = $_POST['mes']; 
$final = "2030";
for($inicio = "2016"; $inicio <= $final; $inicio++){
	//echo $inicio.'<br />';
$mes              = str_replace($inicio , "" , $mes); 		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas então nem precisa de loop...

Basta passar um array no primeiro parâmetro de str_replace

$str = "01 de janeiro de 2016, 01 de fevereiro de 2016, 01 de março de 2016";
 
$str = str_replace([
  'janeiro',
  'fevereiro',
  'março',
  // ...
],
'',
$str);
 
echo $str;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas então nem precisa de loop...

Basta passar um array no primeiro parâmetro de str_replace

$str = "01 de janeiro de 2016, 01 de fevereiro de 2016, 01 de março de 2016";
 
$str = str_replace([
  'janeiro',
  'fevereiro',
  'março',
  // ...
],
'',
$str);
 
echo $str;

Beraldo colocando todos os meses na $meses não funcionou

$ano              = $_POST['ano']; 

$meses = ("janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro");
 
$ano = str_replace($meses, "" , $ano);

Agora assim de forma individual funciona

$ano              = $_POST['ano']; 
$mes = ("janeiro");
$ano = str_replace($mes, "" , $ano);
//$ano = str_replace("janeiro", "" , $ano);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não definiu um arrray. Você definiu uma string com todos os meses.

Arrays são definidos com colchetes, não parênteses.

Siga o modelo que postei e não terá problemas

Beraldo fiz dar forma que você sugeriu e não deu certo. Gostaria que me mostrasse onde estou errando. Tentei de varias formas e nada! :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo fiz dar forma que você sugeriu e não deu certo.

Como fez? Por que não deu certo? Deu erro? Qual?

Descreva o problema. Sem isso é impossível ajudar...

É só pegar o código que postei e digitar os outros meses:

$str = "01 de janeiro de 2016, 01 de fevereiro de 2016, 01 de março de 2016";
$str = str_replace([
  'janeiro',
  'fevereiro',
  'março',
  'abril',
  'maio',
  // ...
],
'',
$str);
echo $str;

Dê uma lida nestes links:

http://php.net/str_replace

http://php.net/manual/pt_BR/language.types.array.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Beraldo. Sua dica me levou ao caminho certo. Fiz assim e funcionou

$meses = array("janeiro" , "fevereiro" , "março", "abril", "maio" , "junho", "julho", "agosto", "setembro" , "outubro" , "novembro" , "dezembro");
 
$nome = str_replace($meses, "" , $nome );

echo $nome .'<br/>'; // não imprime nada porque a ideia é cortar mesmo.

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.