php 日期相关的类 DateInterval DateTimeZone DatePeriod

* 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;
}

  

  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

  

  

* 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
 */

  

原文地址:https://www.cnblogs.com/mingzhanghui/p/9332841.html