[RESOLVIDO] Comportamento diferente da sc_date no SC9

Boa noite.

Estou convertendo alguns projetos e testando. Em uma determinada aplicação controle que funcionava perfeitamente no SC 8.1 estou tendo problemas no comportamento da SC_DATE() para somar uma data. Antes não mudava a formatação. Isso seria um BUG na SC_DATE() ??

exemplo:


$dini = {xdti};

// se der echo aqui $dini no sc8 e no sc9 vai aparecer data assim 20170901 sem tracos

for($xlin = 1; $dini <= {xdtf} ; $xlin++)
{

// em determinado momento manipulava a data para pegar por exemplo somente ano e mes.
$xanomes = substr($dini,0,4) ."-" . substr($dini,4,2)

// na primeira vez aparce normalmente por exemplo 2017-09

// o que ocorre é que quando uso o $dini = sc_date($dini,'aaaammdd',"+",1,0,0); 
// tem comportamento diferente do sc8 para o sc9

// no sc8 continua me retornoando 20170902 por exemplo
// mas no sc9 retorna 2017-09-02

// na segunda vez que passa pela linha $xanomes = substr($dini,0,4) ."-" . substr($dini,4,2)
// aparece   2017--0 ao inves de 2017-09

$dini = sc_date($dini,'aaaammdd',"+",1,0,0); 

   // um echo aqui na $dini vai aparcer    2017-09-02   e na sc8 aparecia 20170902

}

Dá uma olhada na configuração do banco e como está a conexão…

Para dar um feedback aos companheiros.

A SC_DATE está mesmo com problemas. Enviei e-mail para bug@netmake.com.br

Mas para contornar e continuar com meus testes antes que a 9.0.005 saia eu estou usando PHP puro.

//$dini = sc_date($dini,'aaaammdd',"+",1,0,0);
// no sc8 estava funcionando. no 9 nao.--- decidi usar o php puro

$dini = date('Ymd', strtotime("+1 day",strtotime($dini)));

Aproveitando o Topico, também estou com mesmo problema o comportamento da macro sc_date mudou
Tive que adicionar a linha
$i= sc_date_conv($i, “aaaa-mm-dd”, “aaaammdd”);

[code]$vr_inicio = date(“Ym”).“01”;
$vr_fim = date(“Ymd”);

$dif = sc_date_dif($vr_fim, “aaaammdd”, $vr_inicio, “aaaammdd”);
$i =0;

for ($i = $vr_inicio; $i <= $vr_fim; $i)
{

$i = sc_date($i, "aaaammdd", "+", 1, 0, 0);
    
   //nova linha adiciona para resolver problema no scv9
$i= sc_date_conv($i, "aaaa-mm-dd", "aaaammdd");

echo " , ". $i ;

}[/code]

Olá

Por isso nesse caso estou usando a função PHP e não mais a macro.

//$dini = sc_date($dini,'aaaammdd',"+",1,0,0);
// no sc8 estava funcionando. no 9 nao.--- decidi usar o php puro

$dini = date('Ymd', strtotime("+1 day",strtotime($dini)));

Realmente esta macro chequei agora na V9.006 esta com este bug, mas sempre usamos as datas no formato INTERNO aaaa-mm-dd, por isso que muitos usuários do SC nem
notaram este Bug porque usam como padrão aaaa-mm-dd em suas rotinas.

Internamente nos Bancos de Dados as datas são guardadas assim: aaaa-mm-dd e o SC por padrão lê assim, sc_lookup, sc_select,
sc_exec na hora de você gravar insert, update, tem que gravar como aaaa-mm-dd.

Você poderia mudar suas as rotinas para ficar no padrão: aaaa-mm-dd

$_DataInicio= date(“Y-m”)."-01";
$_DataFinal = date(“Y-m-d”);

$_Diferenca = sc_date_dif($_DataFinal, “aaaa-mm-dd”, $_DataInicio, “aaaa-mm-dd”);

echo 'Diferença = '.$_Difereca." Dias
";

for ($_DataAtual = $_DataInicio; $_DataAtual <= $_DataFinal; $_DataAtual) {

 $_DataAtual = sc_date($_DataAtual, "aaaa-mm-dd", "+", 1, 0, 0);

echo ", ". $_DataAtual;

}

Padrão SQL Datas e Time:
https://www.google.com.br/search?q=sql+92+padrao+formato+datas&ie=&oe=#q=SQL+DATAS&spf=1497207513908

O problema relatado já foi corrigido nas ultimas versões do Scriptcase.