PHP 日期函数,学习笔记介绍
举一个简单的date例子:我将使用echo命令把内容输出到我们的客户端(浏览器),我将使用下面的代码做为基础代码,代码如下:
- <!DOCTYPE html>
- <html >
- <head>
- <meta charset="utf-8" />
- <title>Getting started with dates in php5</title>
- </head>
- <body>
- <?php
- date_default_timezone_set('Asia/Shanghai');
- echo "Today is ",date('l');
- ?>
- </body>
- </html>
你将在你的浏览器里看到如下的内容:
Today is Friday
这个函数输出星期几的文本格式,date函数至少需要一个字符参数,这个参数告诉我们怎样格式化当前日期.
尝试不同的格式
如果你看了php手册中PHP date function,那么你将发现有很多格式化日期的方式,代码如下:
<?php echo "Today is ",date('Y-m-d'); ?>
将得到:Today is 2012-08-17
有一些日期是很普遍地被使用,所以PHP提供了一些常量供你使用,举例,你可以使用Cookie获取到客户端日期,代码如下:
<?php echo "Today is ",date(DATE_COOKIE); ?>
你将得到如下面的内容:
Today is Friday, 17-Aug-12 11:34:38 CST
注意当使用常量的时候不要使用引号.
现在是什么时候?如果你想要输出当前时间,你能使用date,不同格式化字符参数,代码如下:
<?php echo "The time is ",date('g:i:sa'); ?>
你将得到:The time is 11:39:59am
本地化你的时区:如果你发现以上的代码没有给出正确的时间,很有可能是因为你的服务器设置了与你本地不同的时区,你需要在服务器上指定时区,那么你用下面的代码:
<?php date_default_timezone_set('Asia/Shanghai');?>
这个将设置中国上海时区,这是php5的函数,注意旧版本的php,有很多供你选择时区,如果你想永久生效,你可以修改你的php.ini文件.
获取其他时间
你经常需要其他时间,而不是现在的时间,当你用date()函数创建时间的时候,系统会使用Unix系统时间,这个时间表示从1970年1月1日 00:00:00 GMT(Unix 纪元时间),到现在的秒数.
为了详细说明怎样获取指定时间的日期,你可以提供秒数做为date(0函数的第二个参数,代码如下:
<?php echo "Today is ",date('Y-m-d', 1309133434); ?>
结果是:Today is 2011-06-27
这个看起来没什么用途,但它意味着你能用date()函数做计算,这之前,你需要简单的创建一个时间戳.
创建时间戳
有很多创建时间戳的方式,我们能够使用mktime()函数得到我们需要的时间戳,代码如下 :
<?php
得到的结果是:Today is 2011-06-26 9:23:33am
mktime()函数需要你依次传递小时,分钟,秒,月,日,年,这是获取时间戳的好的方式,但是有更酷的方式.
通过字符获取时间戳
你可以使用strtotime()函数获取时间戳,php把可读的字符转换成Unix时间戳,PHP在把字符转换成时间戳方面是相当灵活的,因此你可以插入各种各样的值来获取你想要的时间戳.
这是一个简单例子,代码如下:
- <?php
- $mytime=strtotime("7:50pm June 26 2011");
- echo "Today is ",date('Y-m-d g:i:sa', $mytime);
- ?>
- //输出:Today is 2011-06-26 7:50:00pm
PHP在解释字符方面是相当灵巧的,但不是完美的,因此,在你插入之前一定要测试你输入的字符,使用"english-like instructions"转化成需要的时间戳,这是一个非常不错的方式,你可以像下面这样做,代码如下:
- $nextfriday=strtotime("next Friday"); //下周五
- $nextmonth=strtotime("+1 Month"); //从今天开始计算一个月以后的时间
- $lastchristmas=strtotime("-1 year dec 25"); //去年圣诞节
获取日期范围
strtotime返回的值被转换为数字,我们能够用这些数字做基础运算,我们可以用这些数字做很多非常有意思的事情,比如,你每周二需要教一门功课,为期16周,你想得到你教科时间,你能够做下面的事情,代码如下:
- <?php
- $startdate = strtotime('next Tuesday');
- $enddate = strtotime('+16 weeks', $startdate);
- $currentdate = $startdate;
- echo '<ol>';
- while($currentdate < $enddate):
- echo "t<li>", date('M d', $currentdate);
- $currentdate = strtotime('+1 week', $currentdate);
- endwhile;
- echo '</ol>';
- ?>
- /*
- 你将会得到如下的结果:
- Aug 21
- Aug 28
- Sep 04
- Sep 11
- Sep 18
- Sep 25
- Oct 02
- Oct 09
- Oct 16
- Oct 23
- Oct 30
- Nov 06
- Nov 13
- Nov 20
- Nov 27
- Dec 04
- */
注意一下这行:$currentdate = strtotime("+1 week", $currentdate),在这行,你会发现你需要指定一个时间戳做为第二个参数,strtotime将使用这个参数代替默认时间戳(今天),并进行运算.
到某一个日期的天数
使用计算器的时候,我们会试图去计算到某一天的天数,你很容易计算11月份第四个星期四的时间戳,代码如下:
- $someday = strtotime("3 weeks thursday November 1");
- $daysUtilDate = ceil(($someday - time())/60/60/24);
- echo "There are ", $daysUtilDate, " until Thanksgiving";
首先,我们开始计算感恩节日期(11月1号之后的第一个星期四之后的第3个星期四),然后我们通过简单的算术,计算出感恩节到当前时间之间的天数,当我们进行比较运算的时候,我们可以使用time(),因为它返回,到当前时间的纪元秒数.