<< Click to Display Table of Contents >> Períodos e manipulações |
![]() ![]() ![]() |
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