Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia Srs,
eu qro descobrir qtos dias uteis há entre 2 datas e para isso...
eu consegui expor todas as datas entre 2 datas (ex.: 05/02/2018 à 15/02/2018) e ficaria assim(05/02/2018 06/02/2018 07/02/2018 ... 15/02/2018)
e descrevi o dia da semana que representa(05/02/2018 seg 06/02/2018 ter 07/02/2018 qua ... 15/02/2018 qui)
agora eu qria saber qtas vezes aparecem o sabado e domingo.
se puderem me ajudar
o script ficou assim:
<td>
<?php
$data_dia = substr('05/02/2018', 0, 2);
$data_mes = substr('05/02/2018', 3, 2);
$data_ano = substr('05/02/2018', -4);
$dat_out_dia = substr('15/02/2018', 0, 2);
$dat_out_mes = substr('15/02/2018', 3, 2);
$dat_out_ano = substr('15/02/2018', -4);
$data_1=$data_ano.'-'.$data_mes.'-'.$data_dia;
$data_2=$dat_out_ano.'-'.$dat_out_mes.'-'.$dat_out_dia;
$start = new \\DateTime($data_1);
$end = new \\DateTime($data_2);
$periodArr = new \\DatePeriod($start , new \\DateInterval('P1D') , $end);
foreach($periodArr as $period) {
$periodo2=$period->format('d/m/Y');
$periodo2a=$period->format('w').'<br />';
echo $periodo2; ?> <?php // echo $periodo2a;
if($period->format('w') == 0) { echo 'domingo' . '<br>';} else {};
if($period->format('w') == 1) { echo 'segunda' . '<br>';} else {};
if($period->format('w') == 2) { echo 'terça' . '<br>';} else {};
if($period->format('w') == 3) { echo 'quarta' . '<br>';} else {};
if($period->format('w') == 4) { echo 'quinta' . '<br>';} else {};
if($period->format('w') == 5) { echo 'sexta' . '<br>';} else {};
if($period->format('w') == 6) { echo 'Sábado' . '<br>';} else {};
$domingos=substr_count($periodo2a, '6'); //0 segunda 1terca 2quarta 3quin 4sexta 5sabado 6 domingo
?> qtd de domingo: <?php echo $domingos; ?> - <?php
?> qtd de fds: ???????? <?php echo $fds; ?> - <?php
?>
<?php
}
//data de término
//echo $end->format('d/m/Y');
$end2=$end->format('d/m/Y');
$end2a=$end->format('w');
//echo $end2;
$end2a=$end->format('w');
echo $end2; echo $end2a; ?> <?php // echo $periodo2a;
if($end->format('w') == 0) { echo 'domingo' . '<br>';} else {};
if($end->format('w') == 1) { echo 'segunda' . '<br>';} else {};
if($end->format('w') == 2) { echo 'terça' . '<br>';} else {};
if($end->format('w') == 3) { echo 'quarta' . '<br>';} else {};
if($end->format('w') == 4) { echo 'quinta' . '<br>';} else {};
if($end->format('w') == 5) { echo 'sexta' . '<br>';} else {};
if($end->format('w') == 6) { echo 'Sábado' . '<br>';} else {};
//echo substr_count($end2a, '0');
$domingos2=substr_count($end2a, '6');
?> qtd de domingo: <?php echo $domingos2; ?> - <?php
?> qtd de fds: ???????? <?php echo $fds; ?> - <?php
?>
?> qtd de fds total(do do inicio e do range até a ultima data): ???????? <?php echo $fds_total; ?> - <?php
</td>boa noite Vinicius,
n consegui encontrar tal comando para mostrar a qtd de dias uteis ou de fds entre 2 datas...
se puder colar aqui,como ficaria(na integra) ....
Obgd pelo apoio.
Não entendi muito bem o seu algoritmo e nem o que você quis fazer, eu fiz uma função talvez possa ajudar.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
$array_date = Array(); //cria um array
function calcularFDS($data_inicial,$days) {
/*caso queira fazer uma função que calcule entre duas datas e não um intervalo
basta trocar $days por $data_final, criar uma váriavel $intervalo que é a subtração das duas datas
e substituir no for o $i por $intervalo*/
$contador_fds = 0;
$contador_semana = 0;
for($i = 0; $i < $days; $i++){
//$array_date[$i] = date('Y-m-d',strtotime($data_inicial. ' + ' . $i . ' days')); //formato Y-m-d
$array_date[$i] = date('l',strtotime($data_inicial. ' + ' . $i . ' days')); //formato dias da semana
echo $array_date[$i] . "<br/>"; //imprime os dias da semana
if($array_date[$i] == 'Saturday' || $array_date[$i] == 'Sunday'){ //verificar se é sábado ou domingo
$contador_fds = $contador_fds + 1; //soma 1 se for sábado ou domingo
}
else{
$contador_semana = $contador_semana + 1;
}
}
echo "Número de FDS: " . $contador_fds . "<br/>";
echo "Número de Dias corridos: " . $contador_semana . "<br/>";
}
calcularFDS('2018-02-06',14); //função teste
?>
</body>
</html>Além dos exemplos acima, podes utilizar a classe DatePeriod para calcular o período entre duas datas.
$datePeriod = new \DatePeriod(new \DateTime('2018-01-01') , new \DateInterval('P1D') , new \DateTime());
foreach($datePeriod as $date)
{
if ((int)$date->format('w') == 1)
{
echo $date->format('d/m/Y')."\n";// imprime todas as segundas-feiras do início do ano até ontem (a data de hoje não conta no período)
}
}
Como você pode ver no seguinte link: [https://3v4l.org/AQ0KL](https://3v4l.org/AQ0KL)
Uma explicação mais detalhada você localizar aqui: [https://pt.stackoverflow.com/a/165385/5007](https://pt.stackoverflow.com/a/165385/5007)
De qualquer forma, esses cálculos desconsideram feriados.MTO OBRIGADO KIM.
AJUDOU MTO!!!
TU É O CARA!
MTO OBRIGADO KIM.
AJUDOU MTO!!!
TU É O CARA!
GABRIL você TB..OBGD
ESSA FUNÇÃO VAI ME AJUDAR BASTANTE...
VLW PESSOAL!!!!
Agora eu tenho mais um desafio para os Srs...rs
mais ou menos assim:
banco de dados :acoes
tabela=livro
variaveis na tabela livro: id_livro, data_inicio ,data_final,data_inicio_2,data_final_2,atividade
obs:data_inicio e data_final estao assim d/m/Y (ex:08/02/2018)
data_inicio_2 e data_final_2 estao assim Ymd (ex:20180208 )
ela completa ficaria assim
se houvesse aula de portugues do dia 05-02-2018 à 09-02-2018
ficaria assim na tebela
id_livro###data_inicio ###data_final######data_inicio_2###data_final_2###atividade
1####### 05-02-2018###09-02-2018#####20180205#####20180209####portugues
objetivo é criar um calendário que exponha qual atividade há para cada dia do ano.
dai eu criei o seguinte script php:
<tr><!-- ANO-->
<td colspan='365'>2018</td>
</tr>
<tr><!-- meses do ano-->
<td colspan='31'>janeiro</td> <td colspan='28'>Fevereiro</td> .....
</tr>
<tr> <!-- dias do mes-->
<td >1</td> <td >2</td> <td >3</td> ......
</tr>
<!-- aqui que deu um trabalhão
########qria uma função automatica que expusesse tds esses dias
de forma pratica pra eu encaixar essas funções abaixo atraves da
data de inicio e data final das atividades
e mostrasse a atividade que haveria para aquela data
tipo aqueles calendários escolares#########
-->
<tr>
<TD ><!--dia 01/01/2018-->
<?php $sql = "SELECT * FROM livro WHERE data_inicio_2 <= '20180101' and '20180101' <=data_final_2 ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ echo $linha['atividades'] ; } ?>
</TD>
<TD > <!--dia 02/01/2018-->
<?php $sql = "SELECT * FROM livro WHERE data_inicio_2 <= '20180102' and '20180102' <=data_final_2 ";
$res = mysql_query($sql);
while($linha = mysql_fetch_array($res)){ echo $linha['atividades'] ; } ?>
</TD>
<!--...e por ai vai..ate dia 31/12 20181231....rs-->
</tr>
PODEM DAR UM APOIO...
OBRIGADO PESSOAL...

Como o assunto do tópico já foi solucionado, crie um novo tópico com sua dúvida.
Não se esqueça de criar o tópico segundo as Orientações e Regras do Fórum de PHP
A classe DateTime faz isso de maneira bem simples.