Bom dia.
Use o sc_date do SC e com a data final, use o date(‘w’) pra checar qual é o dia da semana. Daí é só usar o sc_date novamente pra adicionar 1 ou 2 dias.
Bom dia.
Use o sc_date do SC e com a data final, use o date(‘w’) pra checar qual é o dia da semana. Daí é só usar o sc_date novamente pra adicionar 1 ou 2 dias.
Kleyber,
Não sei como verificar usando o sc_date do SC, sou iniciando em SC, como verifico se é sabado, domingo ou feriado…??? poderia montar uma condições onde tivesse os três elementos, inclusive os feriados que constam da função que passei? Desde já agradeço.
Gilson,
Eu sei muito bem como é isso. Então aqui vão algumas dicas:
1 - Leia bem o Webhelp que tem no teu SC e se não conseguires, tem Webhelp online, pra ver a questão do SC_DATE: http://www.scriptcase.com.br/docs/pt_br/manual_mp.htm#macros-scriptcase/macros-scriptcase
2 - A função date(‘w’) é uma função do PHP que retorna um número informando a que dia da semana se refere. Então 0 - Domingo, 1 - Segunda… e por aí vai. Dá uma olhada no Google sobre essa função. Se não tiveres um certo conhecimento de PHP procure pelas funções e vais descobrindo. Estou sem tempo no momento e se algum dos colegas puder criar um exemplo, seria bom. Senão assim que tiver um tempinho monto um exemplo pra você.
3 - Assista os videos do Scriptcase que existem no site da Netmake. Vai te ajudar bastante.
Kleyber,
Obrigado pela atenção tenho estudado muito sobre o SC, mas quando passamos a desenvolver fica dificil pela falta de conhecimento de PHP e SC.
Sou iniciante mas gosto de estudar. Tentei várias vezes antes de postar… Vou tentar novamente para ver se consigo. Obrigado.
Gilson,
Assim que chegar em casa eu vejo se consigo montar um exemplo do que tu precisas e posto aqui.
Kleyber,
Fico muito grato pela ajuda… fico aguardando.
Show, Jean. Eu não faria melhor.
E ainda fala que não sabe programar nos webnar… kkkkk
Parabéns Jean.
kkkkkkkkkkk
Muito obrigado ao senhores Kleyber e Jean pelas valiosas ajudas e pelas funções…
Encontre também na net outra que estar dando certo, vou deixar aqui para os demais usuários do forum:
<?php
// Define o formato de saída da data
define('FR_DATA', 'd/m/Y');
$dtfinal = '09/02/2016';
// Teste
echo "O próximo dia util é : ", proDiaUtil($dtfinal);
/*
* proDiaUtil()
* Retorna o próximo dia útil em relação a data.
*
* @data -> Variável que recebe a data.
* Formato: DD/MM/AAAA
*/
function proDiaUtil($data)
{
// Separa a data
$dt = explode('/', $data);
$dia = $dt[0];
$mes = $dt[1];
$ano = $dt[2];
/*
(1) Pega uma data de referência (variável), compara com o datas definidas pelo sistema (feriados e finais de semana)
e retorna a próxima data um dia útil
(2) As datas do sistema são: [1] sábados; [2] domingos; [3] feriados fixos; [4] feriados veriáveis; [5] dias opcionais (ex: quarta de cinza)
(3) Retorno o próximo/imediato dia útil.
*/
// 1 - verifica se a data referente é um final de semana (sábado ou domingo);
// se sábado acrescenta mais 1 dia e faz nova verificação
// se domingo acrescenta mais 1 dia e faz nova verificação
$fsem = date('D', mktime(0,0,0,$mes,$dia,$ano));
$i = 1;
switch($fsem)
{
case 'Sat':
return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
break;
case 'Sun':
return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
break;
default:
// 2 - verifica se a data referente é um feriado
if(in_array($data, Feriados($ano))== true)
{
return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
}
else
{
// Retorna o dia útil
return $data;
}
break;
}
}
/*
* Feriados()
* Gera um array com as datas dos feriados com referência no ano da data pesquisada.
*
* @ano -> Variável que recebe o ano base para o cálculo;
*/
function Feriados($ano)
{
$feriados = array
(
// Armazena feriados fíxos
//Janeiro
date(FR_DATA, mktime(0,0,0,'01','01',$ano)), // 01/01 Ano novo
date(FR_DATA, mktime(0,0,0,'01','02',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','03',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','04',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','05',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'01','06',$ano)), // Recesso
//Março
date(FR_DATA, mktime(0,0,0,'03','19',$ano)), // Dia de São José
//Abril
date(FR_DATA, mktime(0,0,0,'04','21',$ano)), // 21/04 Tiradentes
//Maio
date(FR_DATA, mktime(0,0,0,'05','01',$ano)), // 01/05 Dia do trabalho
//Junho
date(FR_DATA, mktime(0,0,0,'06','24',$ano)), // São João
//Julho
date(FR_DATA, mktime(0,0,0,'07','15',$ano)), // N. Sa. Perpétuo Socorro
//Setembro
date(FR_DATA, mktime(0,0,0,'09','07',$ano)), // 07/09 Independencia
date(FR_DATA, mktime(0,0,0,'09','28',$ano)), // Dia do Municipio de Acopiara
//Outubro
date(FR_DATA, mktime(0,0,0,'10','04',$ano)), // São Francisco
date(FR_DATA, mktime(0,0,0,'10','12',$ano)), // 12/10 N. Senhora Aparecida
//Novembro
date(FR_DATA, mktime(0,0,0,'11','02',$ano)), // 02/11 Finados
date(FR_DATA, mktime(0,0,0,'11','15',$ano)), // 15/11 Proclamação
//Dezembro
date(FR_DATA, mktime(0,0,0,'12','20',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','21',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','22',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','23',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','24',$ano)), // 24/12 Véspera de Natal
date(FR_DATA, mktime(0,0,0,'12','25',$ano)), // 25/12 Natal
date(FR_DATA, mktime(0,0,0,'12','26',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','27',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','28',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','29',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','30',$ano)), // Recesso
date(FR_DATA, mktime(0,0,0,'12','31',$ano)), // 31/12 Véspera de Ano novo
// Armazena feriados variáveis
//flxFeriado($ano, 'pascoa', $r = 1), // Páscoa - Sempre domingo
flxFeriado($ano, 'carn_sab', $r = 1), // Carnaval - Sempre sábado
flxFeriado($ano, 'carn_dom', $r = 1), // Carnaval - Sempre domingo
flxFeriado($ano, 'carn_seg', $r = 1), // Carnaval - Segunda
flxFeriado($ano, 'carn_ter', $r = 1), // Carnaval - Terça
//strtoupper(flxFeriado($ano, 'carn_qua', $r = 1)), // Carnaval - Quarta de cinza
flxFeriado($ano, 'sant_sex', $r = 1), // Sexta Santa
flxFeriado($ano, 'corp_chr', $r = 1) // Corpus Christi
);
return $feriados;
}
/*
* flxFeriado()
* Calcula os dias de feriados variáveis. Com base na páscoa.
*
* @ano -> Variável que recebe o ano base para o cálculo;
* @tipo -> Tipo de dados
* [carn_sab]: Sábado de carnaval;
* [carn_dom]: Domingo de carnaval;
* [carn_seg]: Segunda-feira de carnaval;
* [carn_ter]: Terça-feira de carnaval;
* [carn_qua]: Quarta-feira de carnaval;
* [sant_sex]: Sexta-feira santa;
* [corp_chr]: Corpus Christi;
*/
function flxFeriado($ano, $tipo = NULL)
{
$a=explode("/", calPascoa($ano));
switch($tipo)
{
case 'carn_sab': $d = $a[0]-50; break;
case 'carn_dom': $d = $a[0]-49; break;
case 'carn_seg': $d = $a[0]-48; break;
case 'carn_ter': $d = $a[0]-47; break;
case 'carn_qua': $d = $a[0]-46; break;
case 'sant_sex': $d = $a[0]-2; break;
case 'corp_chr': $d = $a[0]+60; break;
case NULL:
case 'pascoa': $d = $a[0]; break;
}
return date(FR_DATA, mktime(0,0,0,$a[1],$d,$a[2])); break;
}
/*
* calPascoa()
* Calcula o domingo da pascoa. Base para todos os feriádos móveis.
*
* @ano -> Variável que recebe o ano base para o cálculo ;
*/
function calPascoa($ano)
{
$A = ($ano % 19);
$B = (int)($ano / 100);
$C = ($ano % 100);
$D = (int)($B / 4);
$E = ($B % 4);
$F = (int)(($B + 8) / 25);
$G = (int)(($B - $F + 1) / 3);
$H = ((19 * $A + $B - $D - $G + 15) % 30);
$I = (int)($C / 4);
$K = ($C % 4);
$L = ((32 + 2 * $E + 2 * $I - $H - $K) % 7);
$M = (int)(($A + 11 * $H + 22 * $L) / 451);
$P = (int)(($H + $L - 7 * $M + 114) / 31);
$Q = (($H + $L - 7 * $M + 114) % 31) + 1;
return date('d/m/Y', mktime(0,0,0,$P,$Q,$ano));
}
?>
Que bom que resolveu, Gilson. E obrigado por compartilhar o código. Vai ser útil sim.
na verdade sou um exper em pesquisar…
achei o script na net, porém fiz algumas adaptações…
Jean chic.
Só tenho uma observação a fazer.
Tem um bug na sua assinatura onde você fecha a “]” não encontrei onde você abriu a chave.
Ai fiquei sem saber direito sua especialidade.
kkkkkkkkk
Caro [size=1em][font=Verdana]GCONTABIL2015 Todo código compartilhado é válido.
Obrigado por compartilhar.[/font][/size]
Obrigado a todos pela valiosa ajuda.
Acho que isso atende ao que você precisa.
Você pode copiar este código e executá-lo em uma blank para ajustar ao que precisa.
//DATA INICIAL
$data_1=‘2016-02-09’;
//INCREMENTO DE DIAS A DATA INICIAL
$add_dias=80;
//CONTADOR DE FERIADOS
$contador=0;
//ARRAY COM FERIADOS
$feriados_array = array(‘2016-01-01’, ‘2016-02-09’, ‘2016-03-25’, ‘2016-03-27’, ‘2016-04-25’,
‘2016-26-01’, ‘2016-05-26’, ‘2016-06-10’, ‘2016-06-13’);
//TRATAMENTO DA DATA FINAL
$data_2=date_create($data_1);
date_add($data_2,date_interval_create_from_date_string("$add_dias day"));
$data_2=date_format($data_2,“Y-m-d”);
//LAÇO DE REPETIÇÃO DE INCREMENTO E COMPARAÇÃO ENTRE DATAS
while($data_1 < $data_2){
if (in_array($data_1, $feriados_array)) {
$contador++;
}
//TRATAMENTO E INCREMENTO DA DATA INICIAL
$data_1=date_create($data_1);
date_add($data_1,date_interval_create_from_date_string("1 day"));
$data_1=date_format($data_1,"Y-m-d");
}
$data_2=date_create($data_2);
date_add($data_2,date_interval_create_from_date_string("-$contador day"));
$data_2=date_format($data_2,“Y-m-d”);
echo ‘DATA DO AGENDAMENTO = ‘.$data_1.’ - ‘.$contador.’ DIA
’;
echo ‘DATA DO AGENDAMENTO = ‘.$data_2.’
’;
encontrei esta rotina que permite retirar apenas os fins e semana:
//get current month for example
$beginday = “2019-10-01”;
$lastday = “2019-10-31”;
$nr_work_days = getWorkingDays($beginday, $lastday);
echo $nr_work_days;
function getWorkingDays($startDate, $endDate)
{
$begin = strtotime($startDate);
$end = strtotime($endDate);
if ($begin > $end) {
echo "startdate is in the future!
";
return 0;
} else {
$no_days = 0;
$weekends = 0;
while ($begin <= $end) {
$no_days++; // no of days in the given interval
$what_day = date("N", $begin);
if ($what_day > 5) { // 6 and 7 are weekend days
$weekends++;
};
$begin += 86400; // +1 day
};
$working_days = $no_days - $weekends;
return $working_days;
}
}
Sou iniciante no Scriptcase, como posso usar essa função dentro do onload, testei no blank e funcionou. dentro do onload da um erro:Parse error: syntax error, unexpected ‘{’ in C:\Program Files\NetMake\v9\wwwroot\scriptcase\app\SISBOB\form_spc_credito\form_spc_credito_apl.php on line 8014
Incluindo dias não úteis e feriados nacionais.