*  DateInterval

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 7/18/18
 * Time: 21:30
 */
$datetime = new DateTime('2018-07-18 21:30:00');

// +2 weeks
$interval = new DateInterval('P2W');

$datetime->add($interval);
echo $datetime->format('Y-m-d H:i:s').PHP_EOL;

// + 1month
$datetime->add(
    new DateInterval('P1M')
);
echo $datetime->format('Y-m-d H:i:s').PHP_EOL;

// -1month -2weeks
$datetime->add(
    \DateInterval::createFromDateString("-1 month -2 weeks")
);
echo $datetime->format('Y-m-d H:i:s').PHP_EOL;

echo '------------------',PHP_EOL;
// start, interval, recurrences
$datePeriod = new \DatePeriod(
    $datetime,
    \DateInterval::createFromDateString('-1 day'),
    3
);
foreach ($datePeriod as $date) {
    echo $date->format('Y-m-d'),PHP_EOL;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.

  

  output:

2018-08-01 21:30:00
2018-09-01 21:30:00
2018-07-18 21:30:00
------------------
2018-07-18
2018-07-17
2018-07-16
2018-07-15

 

*  DateTimeZone

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 7/18/18
 * Time: 21:42
 */
$timezone = new DateTimeZone('Asia/Tokyo');
$datetime = new \DateTime('2018-07-18 22:42:00', $timezone);
$datetime->setTimezone(
    new DateTimeZone('Asia/Shanghai')
);
echo $datetime->format('Y-m-d H:i:s').PHP_EOL;
// 2018-07-18 21:42:00
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

  

  

*  DatePeriod

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 7/18/18
 * Time: 21:51
 */
$start = new DateTime();
// $interval = new DateInterval('P2W');
$interval = new DateInterval('P1D');
$period = new DatePeriod(
    $start,
    $interval,
    3,
    DatePeriod::EXCLUDE_START_DATE
);

foreach ($period as $nextDateTime) {
    echo $nextDateTime->format('Y-m-d H:i:s'),PHP_EOL;
}
/**
2018-07-19 15:54:20
2018-07-20 15:54:20
2018-07-21 15:54:20
 */
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

  

+30minutes datetime string

<?php
function date_after_xminutes(string $s, int $minutes=30) {
    $time    = new DateTime($s);
    $newTime = $time->add(
        new DateInterval('P0Y0M0DT0H'.$minutes.'M0S')
    );
    return $newTime->format('Y-m-d H:i:s');
}

echo date_after_xminutes('2018-09-30 15:26:00', 30).PHP_EOL;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.