Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, surgiu um problema aqui. Estou fazendo um sistema muuuuito grande que trabalha junto com o sistema dos correios. No calculo de tempo de entrega por CEP dos correios, ele retorna o tempo de entrega em X dias.
Por exemplo: Eu calculo uma entrega que foi postada hoje, os correios me passam que será realizada a entrega em 3 dias úteis.
Até aí tudo bem, só que eu preciso jogar esses dias na data. Vamos supor que hoje é dia 28 de Junho de 2013, se eu calcular 28 (dia de hoje) + 3 (tempo previsto para a entrega) o resultado será 31, mas o mês de Junho só vai até o dia 30.
Como eu poderia fazer esse calculo, sendo que ele retorne uma data válida?
function addToDate($date, $dias=0) {
list($ano,$mes,$dia) = explode('-', $date);
return date('Y-m-d', mktime(0,0,0, $mes, $dia + $dias, $ano))
}
echo addToDate('2013-01-08', 3);
deve funcionar
Utilize a biblioteca DateTime, ela lhe fornece tudo o que você precisa para trabalhar com data e tempo, ao invés das antigas funções time.
Veja só:
$data = new DateTime();
echo $data->format('d/m/Y').'<br />';
$dias = 3;
$data->add(new DateInterval('P'.$dias.'D'));
echo $data->format('d/m/Y');
Saída:
08/01/201311/01/2013
Para ver a funcionalidade em ação:
>
function addToDate($date, $dias=0) {
list($ano,$mes,$dia) = explode('-', $date);
return date('Y-m-d', mktime(0,0,0, $mes, $dia + $dias, $ano))
}
echo addToDate('2013-01-08', 3);
deve funcionar
Nice! Muito obrigado amigo! mktime? Não sabia dessa. Muito obrigado mesmo.
>
Utilize a biblioteca DateTime, ela lhe fornece tudo o que você precisa para trabalhar com data e tempo, ao invés das antigas funções time.
Veja só:
$data = new DateTime();
echo $data->format('d/m/Y').'<br />';
$dias = 3;
$data->add(new DateInterval('P'.$dias.'D'));
echo $data->format('d/m/Y');
Saída:
Para ver a funcionalidade em ação:
http://codepad.viper-7.com/VjaPRN
Uau, duas soluções diferentes, obrigado mesmo, a sua parece ser bem mais simples!
Além de mais simples, é a recomendada. A biblioteca DateTime foi desenvolvida para substituir a maioria, ou senão todas, as funções time. Com o tempo, as funções time poderão ser removidas (mas é só especulação mesmo).
Complementando a resposta do ESerra com um exemplo:
Pega a data atual e soma 3 dias
$diasUteis = 3;
echo date("d/m/Y", strtotime("+{$diasUteis} day"));
Edit:
Eita, preciso ser rápido, quando comecei a colocar a resposta só uma a do ESerra.
Interessante a biblioteca DateTime, não a conhecia.
Uma das soluções é usar strtotime para adicionar dias a uma data.