Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno Conte

Buscando calendario do mês com PHP

Recommended Posts

Bom dia, estou com um cliente que tem o cadastro de metas dele.

Hoje ele lança a meta por vendedor por exemplo R$100.000,00.

O que ele precisa e gerar a meta dia a dia, com isso precisava abrir em uma tela todos os dias do mês e ele ir digitando o valor da meta do dia. exemplo:

01/01/2017 - Domingo

02/01/2017 - Segunda

03/01/2017 - Terça

...

...

31/01/2017 - Terça

Pois ele seleciona o dia que os vendedores trabalham com o valor da meta diaria, tem como eu puxar o calendario do mes inteiro usando o php?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para tal, pode utilizar a class DatePeriod da biblioteca Date/Time.

$start = new \DateTime('first day of this month');
$end = new \DateTime('first day of next month');

foreach(new \DatePeriod($start , new \DateInterval('P1D') , $end) as $date)
{
    printf('Data: %s <br/>' , $date->format('d/m/Y'));
}

É importante visualizar que eu estou selecionando o primeiro dia do mês atual e o primeiro dia do próximo mês (ao invés de escolher o último dia o mês atual). Uma explicação detalhada você pode encontrar no link abaixo:

http://forum.imasters.com.br/topic/550659-erro-em-dateperiod-php-encontra-2-meses-ao-inves-de-3/

Para remover os finais de semana, basta condicionar:

foreach(new \DatePeriod($start , new \DateInterval('P1D') , $end) as $date)
{	
    $weekDay = (int)$date->format('w');
	
    //0 domingo - 6 sábado
    if ($weekDay > 0 && $weekDay < 6)
    {
        printf('Data: %s <br/>' , $date->format('d/m/Y'));
    }
}

Infelizmente, conforme informado no manual, o método DateTime::format() não olha para o locale configurado, logo:

This method does not use locales. All output is in English.


Para imprimir o dia da semana, deve usar strftime. O qual é fácil de se utilizar em conjunto.

Primeiro, define-se o locale:

setlocale(LC_ALL, 'pt_BR');//O locale pode mudar de sistema para sistema, pode ser pt-br, PT_BR, pt_BR, etc..

Depois, só adicionar ao código já existente:

printf('Data: %s (%s)<br/>' , $date->format('d/m/Y') , strftime('%A' , $date->getTimestamp()));

Saída:

Data: 02/01/2017 (segunda)
Data: 03/01/2017 (terça)
Data: 04/01/2017 (quarta)
Data: 05/01/2017 (quinta)
Data: 06/01/2017 (sexta)
Data: 09/01/2017 (segunda)
Data: 10/01/2017 (terça)
Data: 11/01/2017 (quarta)
Data: 12/01/2017 (quinta)
Data: 13/01/2017 (sexta)
Data: 16/01/2017 (segunda)
Data: 17/01/2017 (terça)
Data: 18/01/2017 (quarta)
Data: 19/01/2017 (quinta)
Data: 20/01/2017 (sexta)
Data: 23/01/2017 (segunda)
Data: 24/01/2017 (terça)
Data: 25/01/2017 (quarta)
Data: 26/01/2017 (quinta)
Data: 27/01/2017 (sexta)
Data: 30/01/2017 (segunda)
Data: 31/01/2017 (terça)

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.