date_sub


php apg

SUBTRACTS an amont of days, months, years, hours, minutes and seconds to a DateTime object.



<?php

/* - - - - - - - - - - - - - - - - -

    Object oriented style
   
   - - - - - - - - - - - - - - - - - */

DateTime public DateTime::sub ( DateInterval $interval )


where,

$interval =  A DateInterval object 

?>

<?php

/* - - - - - - - - - - - - - - - - -

      Procedural style
   
   - - - - - - - - - - - - - - - - - */

DateTime date_sub ( DateTime $object , 
                           
DateInterval $interval )


where,

$object = A DateTime object returned by date_create

$interval 
= A DateInterval object 


?>

 $object 


A DateTime object returned by date_create.



 $interval 


A DateInterval object.





This function returns the DateTime object for method chaining or FALSE on failure.

If used in the procedural style this function modifies the DateTime object.



  1 EXERCISE   

<?php

if(class_exists("DateTime") && 
class_exists("DateTimeZone") && 
class_exists("DateInterval"))
{
$dtm_01 = new DateTime("UTC");
$dtm_02 = new DateTime("America/Los_Angeles");

echo 
'<br>public DateTime add<br><br>';

$dti = new DateInterval('P4Y3M20D');
// P = Period 4Y = 4 years 3M = 3 monts 20D = 20 days

$dtm_01_add = $dtm_01->add($dti);
echo 
'From this moment the date will have the following value:<br>';

foreach((array)
$dtm_01->add($dti) as $dt01 => $d01)
{
    echo 
$dt01 . ' = ' . $d01 . '<br>';
}

echo 
'<br>public DateTime sub<br><br>';

$nw_dti = new Dateinterval('P3Y2M10D');
// P = Period 3Y = 3 years 2M = 2 monts 10D = 10 days

$dtm_01_sub = $dtm_01->sub($nw_dti);
echo 
'From this moment the date will have the following value:<br>';

foreach((array)
$dtm_01->sub($nw_dti) as $nwdt01 => $nwd01)
{
    echo 
$nwdt01 . ' = ' . $nwd01 . '<br>';
}
}
else
{
echo 
"The required classes are not available in this system.";
}

?> 

  2 EXERCISE   

<?php

if(class_exists("DateTimeImmutable") && 
class_exists("DateTimeZone") && 
class_exists("DateInterval"))
{
$dtm_01B = new DateTimeImmutable("UTC");
$dtm_02B = new DateTimeImmutable("America/Los_Angeles");

echo 
'<br>public DateTime add<br><br>';

$dti = new DateInterval('P4Y3M20D');

$dtm_01B_add = $dtm_01B->add($dti);
echo 
'From this moment the date will have the following value:<br>';

foreach((array)
$dtm_01B->add($dti) as $dt01B => $d01B)
{
    echo 
$dt01B . ' = ' . $d01B . '<br>';
}

echo 
'<br><br>public DateTime sub<br><br>';

$nw_dti = new Dateinterval('P3Y2M10D');

$dtm_01B_sub = $dtm_01B->sub($nw_dti);
echo 
'From this moment the date will have the following value:<br>';

foreach((array)
$dtm_01B_sub as $nwdt01B => $nwd01B)
{
    echo 
$nwdt01B . ' = ' . $nwd01B . '<br>';
}

// print_r($dtm_01B_sub);

}
else
{
echo 
"The required classes are not available in this system.";
}

?> 

  3 EXERCISE   

<?php

date_default_timezone_set
('UTC');

// Initialise all required variables
$startDate = 'now';
$format = 'Y-m-d H:i:s';
$intervals = [
    
'P3Y6M4DT12H30M5S',
    
'P0D',
    
'P2DT1M',
    
'P1Y2MT23H43M150S'
];

$d = new DateTime($startDate);
echo 
'Start date:<br>' . $d->format($format);
echo 
'<br><br>';

foreach(
$intervals as $k => $interval) {
    
date_sub($d, new DateInterval($interval) );
echo 
$intervals[$k] . ': <br>' . $d->format($format);
    echo 
'<br><br>';
}

?>