分类 技术 下的文章

日期与时间扩展类 - DateTime / DateTimeInterface / DateTimeZone / DateInterval

date_default_timezone_set('PRC');

$dateTime = new DateTime();
p($dateTime->format('Y-m-d H:i:s')); // 当前时间

// DateTime::add
$dateInterval = new DateInterval('P1YT3H'); // 给时间对象增加1年3小时
$dateTime->add($dateInterval);
p($dateTime->format('Y-m-d H:i:s')); // 格式化时间,参数与 date() 接受的参数一致

// DateTime::sub
$dateTime->sub($dateInterval); // 给时间对象减少1年3小时
p($dateTime->format('Y-m-d H:i:s'));

// DateTime::modify
$dateTime->modify('+1 day'); // 修改时间对象,参数与 strtotime() 接受的参数一致
p($dateTime->format('Y-m-d H:i:s'));

// DateTime::setDate
$dateTime->setDate('2016','9','16'); // 三个参数分别表示 "年" "月" "日"

// DateTime::setTime
$dateTime->setDate('0','0','0'); // 三个参数分别表示 "时" "分" "秒"

// DateTime::setTimeStamp
$dateTime->setTimeStamp(time()); 

// DateTime::setTimeZone
$dateTime->setTimeZone(new DateTimeZone('PRC')); // 设置时区

// DateTimeInterface::diff
$dateTime2 = new DateTime();
$dateInterval = $dateTime->diff($dateTime2); // 求两个时间对象之差,返回DateInterval对象
echo $dateInterval->format('相差 %Y 年 %M 月 %D 天, %H 小时 %I 分钟 %S 秒 ');

// DateTimeInterface::getOffect
echo $dateTime->getOffset(); // 获取当前时间对象对UTC时间的偏移 , 参考date('Z');

// DateTimeInterface::getTimeStamp
echo $DateTime::getTimeStamp();

// DateTImeInterface::getTimeZone
echo $dateTime->getTimeZone();

// DateInterval::__construct
$dateInterval = new DateInterval('P1Y');
/*
参数是一个特殊格式的字符串 : P开头,表示'period'
Y表示年;M表示月;D表示天;W表示星期;H表示小时;M表示分;S表示秒, 在字母前面加上数字即可 , 注意顺序不能调换
比如 'P1Y2M3D' 表示1年2个月3天, 'P3D1Y2M' 则错误

如果要表示时间,要加上"T"
比如 'P1Y2M3DT1H1M1S', 当有H,M,S要表示时, 要在Y,M,D后面,H,M,S前面加上T
*/

// DateInterval::format
$dateInterval->format('%y %m %d $h %i $s'); // 大写表示结果补零,比如 01