How do I make a given function return the value of a variable date and a numeric value in php?

-1

I created a function that calculates the next business day of a certain date that it receives, but in addition to returning this new date I wanted it to increment an additional number to a count variable ($ prdia) and return that variable also. How do I do that?

The code is as follows:

  if ($tipo_prz == 'DU'){
    $prdia = 1;    
  //a variável 'prz' foi obtida em outra parte do código   
  // a data_corrigida_DU também foi obtida em outra parte    
      while ($prdia < $prz){
        $data_corrigida_DU = proximoDiaUtilPr($data_corrigida_DU);
      }
    }

The function looks like this:

function proximoDiaUtilPr($data, $saida = 'Y-m-d') {
// Converte $data em um UNIX TIMESTAMP
$timestamp = strtotime($data);
// Calcula qual o dia da semana de $data
// O resultado será um valor numérico:
// 1 -> Segunda ... 7 -> Domingo
$dia = date('N', $timestamp);

// Se for sábado (6) ou domingo (7), calcula a próxima segunda-feira
if ($dia == 6) {
    $timestamp = strtotime("+2 days",strtotime($data));
    $timestamp_final = $timestamp;
    //$timestamp_final = $timestamp + ((8 - $dia) * 3600 * 24);
}

elseif ($dia == 7) {
    $timestamp = strtotime("+1 days",strtotime($data));
    $timestamp_final = $timestamp;
    //$timestamp_final = $timestamp + ((8 - $dia) * 3600 * 24);
}

else {
    // Não é sábado nem domingo acrescenta um dia e incrementa prdia
    $timestamp = strtotime("+1 day",strtotime($data));
    $timestamp_final = $timestamp;
    $prdia++;
}
return date($saida, $timestamp_final);
//echo proximoDiaUtil('2016-09-04');

}

The following error appeared while applying the solution you proposed:

  

Warning: strtotime () expects parameter 1 to be string, array given in   C: \ Users # 8188e \ Desktop \ sicob_atual \ new_xampp \ htdocs \ geq \ diautil.php   online 41

    
asked by anonymous 21.11.2018 / 20:31

2 answers

0

Why not use an array as a return?

function proximoDiaUtilPr($data, $saida = 'Y-m-d') {
// Converte $data em um UNIX TIMESTAMP
$timestamp = strtotime($data);
// Calcula qual o dia da semana de $data
// O resultado será um valor numérico:
// 1 -> Segunda ... 7 -> Domingo
$dia = date('N', $timestamp);

// Se for sábado (6) ou domingo (7), calcula a próxima segunda-feira
if ($dia == 6) {
    $timestamp = strtotime("+2 days",strtotime($data));
    $timestamp_final = $timestamp;
    //$timestamp_final = $timestamp + ((8 - $dia) * 3600 * 24);
}

elseif ($dia == 7) {
    $timestamp = strtotime("+1 days",strtotime($data));
    $timestamp_final = $timestamp;
    //$timestamp_final = $timestamp + ((8 - $dia) * 3600 * 24);
}

else {
    // Não é sábado nem domingo acrescenta um dia e incrementa prdia
    $timestamp = strtotime("+1 day",strtotime($data));
    $timestamp_final = $timestamp;
    $prdia++;
}
return array(date($saida, $timestamp_final), $prdia);
//echo proximoDiaUtil('2016-09-04');
}

When calling the function, take the return from it and use the positions of the array to retrieve the date and $ prdia

$foo = proximoDiaUtilPr();
echo $foo[0]; // exibe a data
echo $foo[1]; // exibe o valor de $prdia
    
21.11.2018 / 20:35
0

Well, I was really thinking incorrectly to solve my problem just use the function like this:

Function:

function proximoDiaUtilPr($data, $saida = 'Y-m-d') {
// Converte $data em um UNIX TIMESTAMP
$timestamp = strtotime($data);
// Calcula qual o dia da semana de $data
// O resultado será um valor numérico:
// 1 -> Segunda ... 7 -> Domingo
$dia = date('N', $timestamp);

if ($dia == 5) {
$timestamp = strtotime("+3 days",strtotime($data));
$timestamp_final = $timestamp;
}
// Se for sábado (6) ou domingo (7), calcula a próxima segunda-feira
elseif ($dia == 6) {
    $timestamp = strtotime("+2 days",strtotime($data));
    $timestamp_final = $timestamp;
    //$timestamp_final = $timestamp + ((8 - $dia) * 3600 * 24);
}

else {
    // Não é sábado nem domingo, mantém a data de entrada
    $timestamp = strtotime("+1 day",strtotime($data));
    $timestamp_final = $timestamp;

}
return date($saida, $timestamp_final);
//echo proximoDiaUtil('2016-09-04');

}

Primary code:

if ($tipo_prz == 'DU'){
$prdia = 1;
  while ($prdia < $prz){
    $data_corr_DU = proximoDiaUtilPr($data_corr_DU);
    $prdia++;
 }
} 

$text = "".$prz.";".$tipo_prz.";".$data_corr_DU;   
fwrite($arquivoj, $text);
}
    
26.11.2018 / 15:01