Dadas duas datas qual é a melhor maneira de encontrar o número de dias da semana em PHP?

StackOverflow https://stackoverflow.com/questions/80541

  •  09-06-2019
  •  | 
  •  

Pergunta

O título é praticamente auto-explicativo.Dadas duas datas qual é a melhor maneira de encontrar o número de dias da semana para usar o PHP?Dias de semana, sendo de segunda a sexta-feira.

Por exemplo, como eu iria descobrir que não são 10 dias de semana, entre 31/08/2008 e 13/09/2008?

Foi útil?

Solução

        $datefrom = strtotime($datefrom, 0);
        $dateto = strtotime($dateto, 0);

        $difference = $dateto - $datefrom;

        $days_difference = floor($difference / 86400);
        $weeks_difference = floor($days_difference / 7); // Complete weeks

        $first_day = date("w", $datefrom);
        $days_remainder = floor($days_difference % 7);

        $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
        if ($odd_days > 7) { // Sunday
            $days_remainder--;
        }
        if ($odd_days > 6) { // Saturday
            $days_remainder--;
        }

        $datediff = ($weeks_difference * 5) + $days_remainder;

A partir daqui: http://www.addedbytes.com/php/php-datediff-function/

Outras dicas

Se você estiver criando um sistema de facturação, você tem que pensar sobre os feriados, carnaval, Páscoa, etc.Não é simples de calcular.

A melhor solução que eu já vi é a pregenerate uma tabela com os dias e o seu tipo de banco de dados SQL (linha por dia = 365 linhas por ano) e, em seguida, efectuar uma simples contagem de consulta com a seleção adequada (cláusula WHERE).

Você pode encontrar esta solução totalmente descrito em Joe Celko está Pensando em Conjuntos:Auxiliar, Temporal e Virtual Tabelas no SQL

Uma forma seria a de converter as datas para unix carimbos de data / hora utilizando strtotime(...), subtraindo-se os resultados e div ing com 86400 (24*60*60):

$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;

ETA:Oh..Você quis dizer durante a semana como no Mon-Fri..Não ver que em primeiro lugar..

A melhor maneira é para iterar através de todas as datas entre o intervalo de datas específico, e obter o dia da semana para cada data.Se for um dia de semana, incrementar um determinado contador.No final do processo, você tem o número de dias da semana.

As funções do PHP a função mktime() e data() (para trabalhar com UNIX carimbos de data / hora) seus amigos estão aqui.

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