PHP系列学习之日期函数使用介绍


Posted in PHP onAugust 18, 2012

介绍

PHP是一门非常令人惊奇的语言。它足够强大(最大的博客(wordpress)的核心语言),它足够广泛(运行在最大社交网站facebook上),它足够简单(作为初学者首选入门语言)。在低成本的机器上运行良好。而且php语言有很多非常不错的服务器套件(如WAMP和MAMP),很方便的安装在你的机器上。PHP有非常丰富的库资源,便于开发者很容易的处理一些业务。由于我们在项目中与日期接触最多,所以今天就从日期函数入手学习。
举一个简单的date例子
我将使用echo命令把内容输出到我们的客户端(浏览器)。我将使用下面的代码做为基础代码。

<!DOCTYPE html> 
<html lang="en"> 
<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 
$mytime=mktime(9, 23, 33, 6, 26, 2011); 
echo "Today is ",date('Y-m-d g:i:sa', $mytime); 
?>

得到的结果是:
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(),因为它返回,到当前时间的纪元秒数。
情有独钟
如果你开始着手学习php,学习日期是学习这种语言最好的方式,因为日期有很多非常有意思的东西随你处理。在手册中发掘日期和时间相关的函数,请分享你的收获给大家。
PHP 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
php对gzip文件或者字符串解压实例参考
Jul 25 PHP
队列在编程中的实际应用(php)
Sep 04 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
PHP实现ftp上传文件示例
Aug 21 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
PHP-FPM实现性能优化
Mar 31 PHP
CodeIgniter常用知识点小结
May 26 PHP
php防止sql注入的方法详解
Feb 20 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 PHP
PHP如何防止用户重复提交表单
Dec 09 PHP
PHP中extract()函数的定义和用法
Aug 17 #PHP
Linux下实现PHP多进程的方法分享
Aug 16 #PHP
PHP基础知识回顾
Aug 16 #PHP
php开发文档 会员收费1期
Aug 14 #PHP
php适配器模式介绍
Aug 14 #PHP
PHP缓存技术的多种方法小结
Aug 14 #PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 #PHP
You might like
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP禁止页面缓存的代码
2011/10/23 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
php提交post数组参数实例分析
2015/12/17 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
如何对python的字典进行排序
2020/06/19 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
我能否用void** 指针作为参数, 使函数按引用接受一般指针
2013/02/16 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
解决mysql的int型主键自增问题
2021/07/15 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技