Date/Time的PHP扩展从PHP 5.2开始就默认被支持,所有这些都被用于现实场景:
1.date 或者 time被DateTime 对象所取代;
2.timezone被DateTimeZone 对象取代;
3.DateInterval 对象代表一个时间间隔,例如,我们说距离现在2天以后,“2天”就是间隔,DateInterval对象不代表一个具体的时间;
4.DatePeriod代表两天之间的时间;
从date()到DateTime
以前我们显示时间使用 date(),他工作简单,我们只需要填入一个日期格式,但痛苦的是更具不同时区来格式化输出时间。
DateTime 就比date支持更多的格式,在我们使用之前需要新建一个DateTime 对象:
$date = new DateTime();
DateTime的析构函数默认是当前时间“now”,我们可以根据自身需要输入一个自己需要的时间字符串,下面我们例了一些demo:
new DateTime('2013, March 24') //DateTime representing 2013, March 24
new DateTime('2013-03-24') //DateTime representing 2013, March 24
new DateTime('+2 days') //DateTime representing 2 days from now on.
new DateTime('tomorrow')
在这里你可以查看PHP默认支持的时间格式:http://www.php.net/manual/en/datetime.formats.php,当然如果没有,你可以自己通过DateTime::createFromFormat方法来自定义创建日期
DateTime::createFromFormat('j-M-Y', '24-Mar-2013');
现在看上去DateTime真是非常的简单。
Unix时间戳
$date->getTimestamp(); //返回一个unix时间戳
修改Date/Times
$date->setDate(2013, 12, 30); //yyyy, mm, dd will set the the specified date
$date->setTime(12, 3, 20); //hh, mm, ss (optional) will modify the time
$date->modify('tomorrow'); //string based manipulation
$date->setTimestamp(1364798550); //modify using a unix timestamp
用多个Dates来操作
现在我们痴迷于DateTime,接下来我们来学习更多的东西,这里有个例子就是比较两个生日大小:
$sheldon = new DateTime('May 20th, 1980');
$neo = new DateTime('March 11th, 1962');
if ($sheldon > $neo)
echo 'Sheldon is younger than neo';
当然我们可以对比两个时间的不同,
$diff = $neo->diff($sheldon);
我们来看下调用DateInterval对象的diff 方法返回的数据(如图2)
当然还可以输出友好格式,例如:
$diff->format('Neo is older by %Y years and %m months older');
看下输出结果(如图3)
如果我们给neo增加这个时间差,就会将他的生日改变成sheldon的了,我们可以这样操作:
$neo->add($diff); //neo's birthday changed to sheldon's
diff不是只能在生成DateInterval 对象的时候的唯一地方,创建新对象可以像这样:
$new_diff = new DateInterval('P2Y');
这里有一些析构函数的格式http://www.php.net/manual/en/dateinterval.construct.php
好了,我们今天就先了解到这里,下一篇我们再继续了解。