PHP5 以后的 DateTime
是一个强大的事件处理对象,現在我来整理一下常用的一些时间日期增减方式。
获取当前时间
1 2 3 |
$date = new DateTime('2000-01-01'); // OR $date = new DateTime('now'); |
增加10天
用 DateInterval 与 DateTime::add()
1 2 3 4 |
$date = new DateTime('2000-01-01'); $day = new DateInterval('P10D'); // P开头代表日期,10D 代表 10 天 $date->add($day); echo $date->format('Y-m-d') ; |
用 DateTime::modify()
1 2 3 |
$date = new DateTime('2006-12-12'); $date->modify('+10 day'); echo $date->format('Y-m-d'); |
减少一个月
1 2 3 4 |
$date = new DateTime('2000-12-31'); $date->modify('-1 month'); echo $date->format('Y-m-d') ; |
用 DateInterval 增加两年四天六小时又八分
1 2 3 4 |
$date = new DateTime('2000-01-01'); $day = new DateInterval('P2Y4DT6H8M'); // 两年四天六小時又八分,中间的 T 是时间的意思 $date->add($day); echo $date->format('Y-m-d') ; |
DateInterval 的写法说明
1 2 3 4 5 6 7 8 9 |
new DateInterval('P1Y2M3D'); // P开头表示日期,一年二個月又三天 new DateInterval('PT4H5M6S'); // T开头表示時間,四小時五分又六秒 new DateInterval('P1Y2M3DT4H5M6S'); // 合并起來,一年二个月三天四小時五分又六秒 new DateInterval('P3M'); // 三个月 new DateInterval('PT1H'); // 一小时 |
两个时间相减计算出天数
1 2 3 4 5 |
$datetime1 = new DateTime('2013-12-23 16:13:08'); $datetime2 = new DateTime('2012-11-22 12:05:07'); $interval = $datetime1->diff($datetime2); echo $interval->format('%d天%H小时%i分%s秒'); //输出时间字符串 echo $interval->days; //输出两个日期相差天数 |
$datetime1->diff()方法会返回DateInterval对象,具体细节可查看 php DateInterval 手册。
注意:
1 2 3 4 |
$date=new \DateTime(); $time1=$date; $day=new DateInterval('P5D'); $time2=$date->add($day); |
你会发现,输出的$time1 和 $time2是一样的。这很好处理,我们只需要加上clone 即可
1 2 3 4 |
$date=new \DateTime(); $time1=clone $date; $day=new DateInterval('P5D'); $time2=$date->add($day); |
这时$time1和$time2就不同步了