Períodos e manipulações

<< Click to Display Table of Contents >>

Navigation:  Data e Hora >

Períodos e manipulações

Previous pageReturn to chapter overviewNext page

define("DATE_BR""d/m/Y H:i:s");
 
// maneiras de criar objetos data:
$agora = new DateTime();
$nasc = new DateTime("1977-07-02");
$data = DateTime::createFromFormat("d/m/Y""10/03/202");
 
var_dump($agora$nasc$data);

 

object(DateTime)[1]

  public 'date' => string '2019-07-03 11:11:49.043880' (length=26)

  public 'timezone_type' => int 3

  public 'timezone' => string 'America/Sao_Paulo' (length=17)

 

object(DateTime)[2]

  public 'date' => string '1977-07-02 00:00:00.000000' (length=26)

  public 'timezone_type' => int 3

  public 'timezone' => string 'America/Sao_Paulo' (length=17)

 

object(DateTime)[3]

  public 'date' => string '0202-03-10 11:11:49.000000' (length=26)

  public 'timezone_type' => int 3

  public 'timezone' => string 'America/Sao_Paulo' (length=17)

 
// usando para mostrar
echo "<p>hoje é dia {$agora->format("d")} de {$agora->format("m")} </p>";
 

hoje é dia 03 de 07
 
// --------- intervalo
 
$intervalo = new DateInterval("P10Y2MT10M"); // P = periodo  | 10Y = 10 anos | 2 meses | T= Tempo | 10 minutos
 
var_dump($intervalo);

 

object(DateInterval)[4]

  public 'y' => int 10

  public 'm' => int 2

  public 'd' => int 0

  public 'h' => int 0

  public 'i' => int 10

  public 's' => int 0

  public 'f' => float 0

  public 'weekday' => int 0

  public 'weekday_behavior' => int 0

  public 'first_last_day_of' => int 0

  public 'invert' => int 0

  public 'days' => boolean false

  public 'special_type' => int 0

  public 'special_amount' => int 0

  public 'have_weekday_relative' => int 0

  public 'have_special_relative' => int 0

 

$data1 = new DateTime();
 
// adicionou intervalo a data
$data1->add($intervalo);
var_dump($data1);
 

object(DateTime)[5]

  public 'date' => string '2029-09-03 11:21:49.044015' (length=26)

  public 'timezone_type' => int 3

  public 'timezone' => string 'America/Sao_Paulo' (length=17)

 

// subtraiu intervalo a data
$data1->add($intervalo);
var_dump($data1);
 

object(DateTime)[5]

  public 'date' => string '2039-11-03 11:31:49.044015' (length=26)

  public 'timezone_type' => int 3

  public 'timezone' => string 'America/Sao_Paulo' (length=17)

 
// data do aniversario, porém ano atual
$aniver = new DateTime(date("Y") . "-07-02");
$agora = new DateTime();
 
// diferença
$dif = $agora->diff($aniver);
 
// quanto tempo até o aniversario
var_dump($aniver$dif);
 

object(DateTime)[6]

  public 'date' => string '2019-07-02 00:00:00.000000' (length=26)

  public 'timezone_type' => int 3

  public 'timezone' => string 'America/Sao_Paulo' (length=17)

 

object(DateInterval)[1]

  public 'y' => int 0

  public 'm' => int 0

  public 'd' => int 1

  public 'h' => int 11

  public 'i' => int 11

  public 's' => int 49

  public 'f' => float 0.044068

  public 'weekday' => int 0

  public 'weekday_behavior' => int 0

  public 'first_last_day_of' => int 0

  public 'invert' => int 1

  public 'days' => int 1

  public 'special_type' => int 0

  public 'special_amount' => int 0

  public 'have_weekday_relative' => int 0

  public 'have_special_relative' => int 0

 
if ($dif->invert) {
    echo "<p>seu aniversario foi a {$dif->days} dias</p>";
else {
    echo "<p>faltam {$dif->days} para seu aniversario </p>";
}

 

seu aniversario foi a 1 dias

 
// outra forma de somar ou subtrair dias
$vcto = new DateTime("now");
 
// tira 10 dias
$vcto->sub(DateInterval::createFromDateString("10days"));
echo "<p>"$vcto->format(DATE_BR), "</p>";
 

23/06/2019 11:11:49

 
// add 10 dias
$vcto->add(DateInterval::createFromDateString("1month"));
echo "<p>"$vcto->format(DATE_BR), "</p>";
 

23/07/2019 11:11:49

 
// seta dia 1 do mês atual
$dia1 = new DateTime(date("Y") . "-" . date("M") . "-01");
echo "<p>"$dia1->format(DATE_BR), "</p>";
 

01/07/2019 00:00:00

 
// TESTE se o dia atual é 29, 30, 31, marca dia 1 do mês seguinte

// teste (forçaremos dia 29 do mês atual para testar)
$v = new DateTime(date("Y") . "-" . date("M") . "-29");
 
if ($v->format("d") > 28) {
    // seta para dia 1
    $v->modify($v->format("Y-M-01"));
}
 
// add 1 mes
$v->add(DateInterval::createFromDateString("1month"));
 
echo "<p>V = "$v->format(DATE_BR), "</p>";
 

V = 01/08/2019 00:00:00

 
// parcelamento mensal
$parcelas = [];
$data = new DateTime("2019-07-31");
for ($p = 1$p < 13$p++) {
    $data->add(DateInterval::createFromDateString("1month"));
    echo "<p>Parcela "$p" - data: "$data->format(DATE_BR), "</p>";
}
 

Parcela 1 - data: 31/08/2019 00:00:00

Parcela 2 - data: 01/10/2019 00:00:00

Parcela 3 - data: 01/11/2019 00:00:00

Parcela 4 - data: 01/12/2019 00:00:00

Parcela 5 - data: 01/01/2020 00:00:00

Parcela 6 - data: 01/02/2020 00:00:00

Parcela 7 - data: 01/03/2020 00:00:00

Parcela 8 - data: 01/04/2020 00:00:00

Parcela 9 - data: 01/05/2020 00:00:00

Parcela 10 - data: 01/06/2020 00:00:00

Parcela 11 - data: 01/07/2020 00:00:00

Parcela 12 - data: 01/08/2020 00:00:00

 
// parcelamento quinzenal
$parcelas = [];
$data = new DateTime("2019-07-31");
for ($p = 1$p < 13$p++) {
    $data->add(DateInterval::createFromDateString("15days"));
    echo "<p>Parcela "$p" - data: "$data->format(DATE_BR), "</p>";
}

 

Parcela 1 - data: 15/08/2019 00:00:00

Parcela 2 - data: 30/08/2019 00:00:00

Parcela 3 - data: 14/09/2019 00:00:00

Parcela 4 - data: 29/09/2019 00:00:00

Parcela 5 - data: 14/10/2019 00:00:00

Parcela 6 - data: 29/10/2019 00:00:00

Parcela 7 - data: 13/11/2019 00:00:00

Parcela 8 - data: 28/11/2019 00:00:00

Parcela 9 - data: 13/12/2019 00:00:00

Parcela 10 - data: 28/12/2019 00:00:00

Parcela 11 - data: 12/01/2020 00:00:00

Parcela 12 - data: 27/01/2020 00:00:00