Resolvido : Geração datas Escala de serviço

Ola amigos,
Estou enfrentando dificuldade para gera um algoritimo para escala de serviço 12x14 e 12x48, exemplo
se a pessoa trabalha de
08h de 14/08/2014 ate as 20h de 14/08/2014
ela estara de servico novamente as
20h de 15/08/2014 ate as 08h de 15/08/2014
e
08h de 17/08/2014 ate as 20h de 17/08/2014
e
20h de 18/08/2014 ate as 08h de 18/08/2014
isso seria uma geração automatica, estou tentando utilizar o seguinte codigo

$intervalos=“00/1/5/6”
$qtd_dias=explode("/",$intervalos);
$ICOUNT=count($qtd_dias);

$data_escala=date("{data_escala}");

$ICOUNT=$ICOUNT==0?1:$ICOUNT;

for ($i = 0; $i <= ($ICOUNT-1); $i++)
{

$datas_escalas=sc_date($data_escala,“AAAA-MM-DD”,"+",$qtd_dias[$i],0,0);

sc_exec_sql(“INSERT INTO escala_servico.grupos_escalas_servicos
(codigo_grupos, codigo_escala,data_escala)
VALUES ( 1, 1, ‘$datas_escalas’)”);
}

//fim

Assim esta funcionando " $intervalos=“00/1/5/6” " para duas escalas perfeitamente, o problema é que teria que gerar conforme o usuário informa a data inicial e final da geracao isto é mais de duas escalas ou varias .
Att Arquimedes

Arquimedes, vê se isso ajuda:
(os campos DataInicio e DataFinal são do tipo datahora no scriptcase)

$escala=12;
$folga=24;

$inicioEscala = strtotime({DataInicio});
while ($inicioEscala <= strtotime({DataFinal})) {
$fimEscala = strtotime("+$escala hour",$inicioEscala);

$FE = date("Y-m-d H:i:s", $fimEscala);
$IE = date("Y-m-d H:i:s", $inicioEscala);
echo "Escala de: $IE até $FE. <br>";

$inicioEscala = strtotime("+$folga hour", $fimEscala);

}

Obrigado amigo pela ajuda mais quando eu colocar do dia 14/08/2014 a 20/08/2014 esta aparecendo

Escala de: 1969-12-31 21:00:00 até 1970-01-01 09:00:00

Na configuração dos campos data, coloca “Usar configurações regionais” = NÃO, “Exibição” = dd/mm/aaaa hh:mm:ss e o “Formato Interno” = AAAA-MM-DD HH:II:SS
Lembre-se que estes dois campos são data/hora, ou seja vc tem que digitar: 14/08/2014 08:00:00 e 20/08/2014 20:00:00
[]s

Obrigado amigo obrigado pela ajuda,
Marquei c coloquei o configurações regionais" = NÃO, “Exibição” = dd/mm/aaaa hh:mm:ss mais nao encontrei “Formato Interno” = AAAA-MM-DD HH:II:SS e para esse periodo ainda aparece

Escala de: 1969-12-31 21:00:00 até 1970-01-01 09:00:00.

Att Arquimedes

Qual o tipo do form?

fom unico registro
eu alterei para

$escala=12;
$folga=24;

$inicioEscala = strtotime(“14/08/2014 08:00:00”);
while ($inicioEscala <= strtotime(“20/08/2014 08:00:00”)) {
$fimEscala = strtotime("+$escala hour",$inicioEscala);

$FE = date(“Y-m-d H:i:s”, $fimEscala);
$IE = date(“Y-m-d H:i:s”, $inicioEscala);
echo "Escala de: $IE até $FE.
";

$inicioEscala = strtotime("+$folga hour", $fimEscala);
}

e esta aparecendo
Escala de: 1970-01-01 00:00:00 até 1970-01-01 12:00:00.

Crie dois novos campos, {DataInicio} e {DataFinal}, sem ser campos da sua tabela.

Tb não deu certo, criei os campos do tipo data hora fiz as configurações passadas e ainda esta aparecendo
Escala de: 1970-01-01 00:00:00 até 1970-01-01 12:00:00.

Att Arquimedes

Vc fez o teste com esse codigo?
Não estou conseguindo utilizar ele. mais obrigado pela força.

Att Arquimedes

Testei sim e deu certo.
O problema está no formato da data, tem que ser A-M-D H:I:S
Veja a modificação que fiz no teu código:
$escala=12;
$folga=24;

$inicioEscala = strtotime(“2014-08-14 08:00:00”);
while ($inicioEscala <= strtotime(“2014-08-20 08:00:00”)) {
$fimEscala = strtotime("+$escala hour",$inicioEscala);

$FE = date(“Y-m-d H:i:s”, $fimEscala);
$IE = date(“Y-m-d H:i:s”, $inicioEscala);
echo "Escala de: $IE até $FE.
";

$inicioEscala = strtotime("+$folga hour", $fimEscala);
}

Isso gerou a seguinte saida:

Escala de: 2014-08-14 08:00:00 até 2014-08-14 20:00:00.
Escala de: 2014-08-15 20:00:00 até 2014-08-16 08:00:00.
Escala de: 2014-08-17 08:00:00 até 2014-08-17 20:00:00.
Escala de: 2014-08-18 20:00:00 até 2014-08-19 08:00:00.
Escala de: 2014-08-20 08:00:00 até 2014-08-20 20:00:00.

Amigao Allan Medeiros vc matou a charada, muito bom, posso lhe pedir so mais um favor.

ficou perfeito, so tem mais um problema nos dois primeiros dias ficou 10, agora tem o seguinte problema
os dois primeiros serviços são como gerado 12/24h o terceiro ira começar somente 48 horas depois isto é
seria escala de 12/24 por 12/48h

1)Escala de: 2014-08-14 08:00:00 até 2014-08-14 20:00:00.
2) Escala de: 2014-08-15 20:00:00 até 2014-08-16 08:00:00.
3) Escala de: 2014-08-18 08:00:00 até 2014-08-17 20:00:00.
4) Escala de: 2014-08-19 20:00:00 até 2014-08-19 08:00:00.

Desde ja agradeço a ajuda, e obrigado pela compreensão.

Att Arquimedes

resolvi assim acredito que esteja correto.
$escala=12;
$folga_a=24;
$folga_b=48;

$inicioEscala = strtotime(“2014-08-14 08:00:00”);
while ($inicioEscala <= strtotime(“2014-08-28 08:00:00”)) {
$fimEscala = strtotime("+$escala hour",$inicioEscala);

$dias = mktime(date('H', $fimEscala) - date('H', $inicioEscala), date('i', $fimEscala) - date('i', $inicioEscala), date('s', $fimEscala) - date('s', $inicioEscala));
$dias_horas = date('H:i:s', $dias);

$FE = date(“Y-m-d H:i:s”, $fimEscala);
$IE = date(“Y-m-d H:i:s”, $inicioEscala);
$FEE = date(“H:i:s”, $fimEscala);
$IEE = date(“H:i:s”, $inicioEscala);

echo "Escala de: $IE até $FE.
";
{
if($FEE > $IEE)
{

  $inicioEscala = strtotime("+$folga_a hour", $fimEscala);
}
else
{
$inicioEscala = strtotime("+$folga_b hour", $fimEscala);
}
}

}

resultado

Escala de: 2014-08-14 08:00:00 até 2014-08-14 20:00:00.
Escala de: 2014-08-15 20:00:00 até 2014-08-16 08:00:00.
Escala de: 2014-08-18 08:00:00 até 2014-08-18 20:00:00.
Escala de: 2014-08-19 20:00:00 até 2014-08-20 08:00:00.
Escala de: 2014-08-22 08:00:00 até 2014-08-22 20:00:00.
Escala de: 2014-08-23 20:00:00 até 2014-08-24 08:00:00.
Escala de: 2014-08-26 08:00:00 até 2014-08-26 20:00:00.
Escala de: 2014-08-27 20:00:00 até 2014-08-28 08:00:00.

Muito obrigado pela ajuda Allan Medeiros.

Att Arquimedes

Qq coisa manda as ordens!

Amigo estou tentando e ainda nao conseguir.
Em um periodo de 30 dias de escala, os sabados e domingos nao pode ser gerado as escalas.
Como fasso para gera escala somente em dias da semana?
Eu fiz uma sql para exibir os dias da semana gerada, conforme abaixo.

SELECT
EXTRACT( DOW FROM esca_serv_data_inicio) AS DiaSemanaN,
CASE EXTRACT( DOW FROM esca_serv_data_inicio)
WHEN 0 THEN ‘Domingo’
WHEN 1 THEN ‘Segunda’
WHEN 2 THEN ‘Terça’
WHEN 3 THEN ‘Quarta’
WHEN 4 THEN ‘Quinta’
WHEN 5 THEN ‘Sexta’
WHEN 6 THEN ‘Sábado’
END AS DiaSemana
FROM escalaservico.escala_servico

Att Arquimedes