PHP日期时间用法大全

简介:

PHP日期时间用法大全

1.一般在PHP初始化文件头部,首先要设置正确的时区,否则主机默认时区不对的话,造成PHP代码中用到的日期时间都不对。

 
  1. echo date_default_timezone_get();//获取主机默认时区

  2. date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海   或者:

  3. date_default_timezone_set('PRC');//其中PRC为“中华人民共和国”



 
  1. date_default_timezone_set('Asia/Shanghai');

  2. $time=date("Y-m-d H:i:s");

  3. $time=StrToTime($time);

2.获取本地日期时间:

 
  1. echodate('Y:m:d h:i:s'); //2013:01:19 01:10:43

格式:string date ( string format [, int timestamp] )

还有一些格式:

format字符 说明 返回值例子
--- ---
d 月份中的第几天,有前导零的 2 位数字 01 到 31
D 星期中的第几天,文本表示,3 个字母 Mon 到 Sun
j 月份中的第几天,没有前导零 1 到 31
l(“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday
N ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) 1(表示星期一)到 7(表示星期天)
S 每月天数后面的英文后缀,2 个字符 st,nd,rd 或者 th。可以和 j 一起用
w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
z 年份中的第几天 0 到 366
星期 --- ---
W ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) 例如:42(当年的第 42 周)
--- ---
F 月份,完整的文本格式,例如 January 或者 March January 到 December
m 数字表示的月份,有前导零 01 到 12
M 三个字母缩写表示的月份 Jan 到 Dec
n 数字表示的月份,没有前导零 1 到 12
t 给定月份所应有的天数 28 到 31
--- ---
L 是否为闰年 如果是闰年为 1,否则为 0
o ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) Examples: 1999 or 2003
Y 4 位数字完整表示的年份 例如:1999 或 2003
y 2 位数字表示的年份 例如:99 或 03
时间 --- ---
a 小写的上午和下午值 am 或 pm
A 大写的上午和下午值 AM 或 PM
B Swatch Internet 标准时 000 到 999
g 小时,12 小时格式,没有前导零 1 到 12
G 小时,24 小时格式,没有前导零 0 到 23
h 小时,12 小时格式,有前导零 01 到 12
H 小时,24 小时格式,有前导零 00 到 23
i 有前导零的分钟数 00 到 59>
s 秒数,有前导零 00 到 59>
时区 --- ---
e 时区标识(PHP 5.1.0 新加) 例如:UTC,GMT,Atlantic/Azores
I 是否为夏令时 如果是夏令时为 1,否则为 0
O 与格林威治时间相差的小时数 例如:+0200
T 本机所在的时区 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。
Z 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 -43200 到 43200
完整的日期/时间 --- ---
c ISO 8601 格式的日期(PHP 5 新加) 2004-02-12T15:19:21+00:00
r RFC 822 格式的日期 例如:Thu, 21 Dec 2000 16:01:07 +0200
U 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 参见 time()


2.getdate()这个函数返回一个关联数组:

Array
(
    [seconds] => 40
    [minutes] => 58
    [hours]   => 21
    [mday]    => 17
    [wday]    => 2
    [mon]     => 6
    [year]    => 2003
    [yday]    => 167
    [weekday] => Tuesday
    [month]   => June
    [0]       => 1055901520
)


3.idate ( string format [, int timestamp] ),format只接受一个字符:


format 字符 说明
B Swatch Beat/Internet Time
d 月份中的第几天
h 小时(12 小时格式)
H 小时(24 小时格式)
i 分钟
I 如果启用夏时制则返回 1,否则返回 0
L 如果是闰年则返回 1,否则返回 0
m 月份的数字
s 秒数
t 本月的总天数
U 自 Unix 纪元(January 1 1970 00:00:00 GMT)起的秒数――这和 time() 作用相同
w 星期中的第几天(星期天是 0)
W ISO-8601 格式年份中的第几个星期,每星期从星期一开始
y 年份(1 或 2 位数字――见下面说明)
Y 年份(4 位数字)
z 年份中的第几天
Z 以秒为单位的时区偏移量


4.localtime(time(), true); 返回一个关联数组,含义如下:


Array
(
    [tm_sec] => 24
    [tm_min] => 3
    [tm_hour] => 19
    [tm_mday] => 3
    [tm_mon] => 3
    [tm_year] => 105
    [tm_wday] => 0
    [tm_yday] => 92
    [tm_isdst] => 1
)
"tm_sec" - 秒数 
"tm_min" - 分钟数 
"tm_hour" - 小时 
"tm_mday" - 月份中的第几日 
"tm_mon" - 年份中的第几个月,从 0 开始表示一月 
"tm_year" - 年份,从 1900 开始 
"tm_wday" - 星期中的第几天 
"tm_yday" - 一年中的第几天 
"tm_isdst" - 夏令时当前是否生效 
注: 月份从 0(一月)到 11(十二月),星期数从 0(星期天)到 6(星期六)。


5.microtime -- 返回当前 Unix 时间戳和微秒数,返回格式:msec sec  

6.strftime -- 根据区域设置格式化本地时间/日期,这个参数比较多,详情见手册。经常和另一个函数同时出现:strptime -- 解析由 strftime() 生成的日期/时间

 
  1. $format = '%d/%m/%Y %H:%M:%S';

  2. $strf = strftime($format);


  3. echo"$strf\n";  //03/10/2004 15:54:19


6.mktime -- 取得一个日期的 Unix 时间戳

参数int hour , int minute , int second , int month , int day , int year

当你要表示某个月的最后一天,可以用下个月的第0天表示(也可以用负数):

 
  1. $lastday = mktime(0, 0, 0, 3, 0, 2000);

  2. echostrftime("Last day in Feb 2000 is: %d", $lastday);


7.time -- 返回当前的 Unix 时间戳

这个时间戳,一般我们作为参数,用作前面的函数,比如date()

 
  1. $nextWeek = time() + (7 * 24 * 60 * 60); // 7天

  2. echo'Next Week: '. date('Y-m-d', $nextWeek) ."\n";


二、时间日期转换

1、checkdate(month,day,year)函数验证指定的值合法性,该函数返回 true,否则返回 false。

 
  1. <?php  

  2. if(checkdate(4,31,2013)==true){//false

  3. echo 1;

  4. }

  5. else{

  6. echo 0;

  7. }

  8. if(checkdate(4,30,2013)==true){//true

  9. echo 1;

  10. }

  11. else{

  12. echo 0;

  13. }

  14. ?>  

2、日期转换成时间戳

$time=date("Y-m-d H:i:s");

$time=StrToTime($time);

3、时间戳转换成日期

$time="1366704555";

$time=date("Y-m-d H:i:s",$time);

4、获取指定日期

 
  1. <?php

  2. date_default_timezone_set('Asia/Shanghai');

  3. echo"今天:",date("Y-m-d",time()),"<br>";  

  4. echo"今天:",date("Y-m-d",strtotime("26 april 2013")),"<br>";  

  5. echo"昨天:",date("Y-m-d",strtotime("-1 day")), "<br>";  

  6. echo"明天:",date("Y-m-d",strtotime("+1 day")), "<br>";  

  7. echo"一周后:",date("Y-m-d",strtotime("+1 week")), "<br>";  

  8. echo"一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<br>";  

  9. echo"下个星期四:",date("Y-m-d",strtotime("next Thursday")), "<br>";  

  10. echo"上个周一:".date("Y-m-d",strtotime("last Monday"))."<br>";  

  11. echo"一个月前:".date("Y-m-d",strtotime("last month"))."<br>";  

  12. echo"一个月后:".date("Y-m-d",strtotime("+1 month"))."<br>";  

  13. echo"十年后:".date("Y-m-d",strtotime("+10 year"))."<br>";  

  14. ?>

5、php获取微博(博文、动态)发表于多久时间前

另一方法:http://xuqin.blog.51cto.com/5183168/1264254

 
  1. <?php

  2. function maktimes($time){

  3. $t=time()-$time;

  4. $f=array(

  5. '31536000'=> '年',

  6. '2592000' => '个月',

  7. '604800'  => '星期',

  8. '86400'   => '天',

  9. '3600'    => '小时',

  10. '60'      => '分钟',

  11. '1'       => '秒'

  12.    );

  13. foreach ($fas$k=>$v){        

  14. if (0 !=$c=floor($t/(int)$k)){

  15. return'发表于'.$c.$v.'前';

  16.        }

  17.    }

  18. }

  19. /*

  20. date_default_timezone_set('Asia/Shanghai');

  21. $time=date("Y-m-d H:i:s");

  22. $time=StrToTime($time);

  23. */

  24. $time="1366939913";

  25. echo maktimes($time);

  26. ?>

6、php计算两日期剩余(间隔)时间天数


 
  1. <?php

  2. function format($a,$b){

  3. //检查两个日期大小,默认前小后大,如果前大后小则交换位置以保证前小后大

  4. if(strtotime($a)>strtotime($b)) list($a,$b)=array($b,$a);

  5. $start  = strtotime($a);

  6. $stop   = strtotime($b);

  7. $extend = ($stop-$start)/86400;

  8. $result['extends'] = $extend;   //共多少天

  9. if($extend<7){                //如果小于7天直接返回天数

  10. $result['daily'] = $extend;

  11.        }elseif($extend<=31){        //小于28天则返回周数,由于闰年2月满足了

  12. if($stop==strtotime($a.'+1 month')){

  13. $result['monthly'] = 1;

  14.            }else{

  15. $w = floor($extend/7);

  16. $d = ($stop-strtotime($a.'+'.$w.' week'))/86400;

  17. $result['weekly']  = $w;

  18. $result['daily']   = $d;

  19.            }

  20.        }else{

  21. $y=    floor($extend/365);

  22. if($y>=1){                //如果超过一年

  23. $start = strtotime($a.'+'.$y.'year');

  24. $a     = date('Y-m-d',$start);

  25. //判断是否真的已经有了一年了,如果没有的话就开减

  26. if($start>$stop){

  27. $a = date('Y-m-d',strtotime($a.'-1 month'));

  28. $m =11;

  29. $y--;    

  30.                }

  31. $extend = ($stop-strtotime($a))/86400;

  32.            }

  33. if(isset($m)){

  34. $w = floor($extend/7);

  35. $d = $extend-$w*7;

  36.            }else{

  37. $m = isset($m)?$m:round($extend/30);

  38. $stop>=strtotime($a.'+'.$m.'month')?$m:$m--;

  39. if($stop>=strtotime($a.'+'.$m.'month')){

  40. $d=$w=($stop-strtotime($a.'+'.$m.'month'))/86400;

  41. $w = floor($w/7);

  42. $d = $d-$w*7;

  43.                }

  44.            }

  45. $result['yearly']  = $y;

  46. $result['monthly'] = $m;

  47. $result['weekly']  = $w;

  48. $result['daily']   = isset($d)?$d:null;

  49.        }

  50. returnarray_filter($result);

  51.    }

  52. echo'<pre />';

  53.    print_r(format('2013-4-2','2013-5-1'));

  54. echo'<pre />';

  55. echo'<hr />';

  56. $ret_arr=format('2013-3-2','2013-5-1');

  57. echo'共'.$ret_arr['extends'].'天';

  58. echo'<br />';

  59. echo$ret_arr['yearly'].'年';

  60. echo$ret_arr['monthly'].'月';

  61. echo$ret_arr['weekly'].'周';

  62. echo$ret_arr['daily'].'天';

  63. ?>

输出:


Array
(
    [extends] => 29
    [weekly] => 4
    [daily] => 1
)
共60天
年1月4周1天


7、获取两日期差值数组

方法一:

 
  1. <?php

  2. /**

  3.         * 获取两日期差值数组

  4.         *

  5.         * 边界 限定符:

  6.         *

  7.         * () 不包含边界

  8.         * [] 包含边界

  9.         * (] 不包含左边界

  10.         * [) 不包含右边界

  11.         *

  12.         * @param string $start_create_date

  13.         * @param string $end_create_date

  14.         * @param string $inclusive 是否包含边界

  15.         *

  16.         * @return array

  17.         */

  18. function getDateDiffArray($start_create_date ,$end_create_date ,$inclusive='[]'){

  19. static$day_interval = 86400;

  20. $data = array();

  21. $start = (int) strtotime($start_create_date);

  22. $end = (int) strtotime($end_create_date);

  23. if ($start > $end) return$data;

  24. for ($start += $day_interval;$start < $end;){

  25. $data[] = date('Y-m-d',$start);

  26. $start += $day_interval;

  27.            }

  28. switch ($inclusive){

  29. case'()':

  30. break;

  31. case'[]':

  32. array_unshift($data,$start_create_date);

  33. if ($start_create_date != $end_create_date)

  34. $data[] = $end_create_date;

  35. break;

  36. case'(]':

  37. $data[] = $end_create_date;

  38. break;

  39. case'[)':

  40. array_unshift($data,$start_create_date);

  41. break;

  42. default:

  43. break;

  44.            }

  45. return$data;

  46.        }

  47. echo'<pre />';

  48.        print_r( getDateDiffArray("2013-04-26","2013-05-01"));

  49. echo'<pre />';

  50. ?>

输出:


Array
(
    [0] => 2013-04-26
    [1] => 2013-04-27
    [2] => 2013-04-28
    [3] => 2013-04-29
    [4] => 2013-04-30
    [5] => 2013-05-01
)


方法二:


 
  1. <?php

  2. function intervalDate($begDate,$endDate){

  3. $date = array();

  4. $begTime = strtotime($begDate)+86400;

  5. $endTime = strtotime($endDate);

  6. while($begTime < $endTime){

  7. $date[]= date("Y-n-d",$begTime);

  8. $begTime+=86400;

  9.        }

  10. return$date;

  11.    }

  12. $begDate="2013-04-26";

  13. $endDate="2013-05-01";

  14. echo"<pre>";

  15.    print_r(intervalDate($begDate,$endDate));

  16. ?>


输出:


Array
(
    [0] => 2013-4-27
    [1] => 2013-4-28
    [2] => 2013-4-29
    [3] => 2013-4-30
)


8、获取某个日期的 周数、周对应的开始结束时间

 
  1. <?php

  2. //获取某个日期的 周数、周对应的开始结束时间

  3. function getWeekStartEndDay($day){

  4. $g  = strftime("%u",strtotime($day));

  5. returnarray(

  6. 'week_num'=>strftime("%V",strtotime($day)),

  7. 'week_start_day'=>strftime('%Y-%m-%d',strtotime($day)-($g-1)*86400),

  8. 'week_start_day_cn'=>strftime('%Y年%m月%d日',strtotime($day)-($g-1)*86400),

  9. 'week_end_day'=>strftime('%Y-%m-%d',strtotime($day) + (7-$g)*86400),

  10. 'week_end_day_cn'=>strftime('%Y年%m月%d日',strtotime($day) + (7-$g)*86400)

  11.        );

  12.    }

  13. echo'<pre />';

  14.    print_r(getWeekStartEndDay("2013-04-26"));

  15. ?>

输出:


Array
(
    [week_num] => 
    [week_start_day] => 2013-04-27
    [week_start_day_cn] => 2013年04月27日
    [week_end_day] => 2013-05-03
    [week_end_day_cn] => 2013年05月03日
)


9、php获取服务器时间

http://xuqin.blog.51cto.com/5183168/1177160

10、php根据出生日期计算年龄

http://xuqin.blog.51cto.com/5183168/1168369





      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1186951,如需转载请自行联系原作者




相关文章
|
7天前
|
PHP
PHP的pcntl多进程用法实例
PHP使用PCNTL系列的函数也能做到多进程处理一个事务。
|
1月前
|
Unix PHP 数据库
PHP日期和时间Date()函数获取当前时间
通过灵活运用 `date()`函数及其丰富的格式选项,PHP开发者可以轻松地在应用程序中处理和展示日期及时间信息。无论是需要精确到秒的完整时间戳,还是仅仅展示日期或时间的某一部分,`date()`函数都能胜任。理解并熟练应用这些格式化技巧,对于提升代码的可读性和维护性至关重要。
38 1
|
3月前
|
监控 数据库连接 PHP
php中register_shutdown_function函数用法详解
通过 `register_shutdown_function`,PHP开发者可以对脚本的终止进行更精细化的处理,这个函数让开发者能在脚本的生命周期结束时有机会执行最后的操作,无论脚本是正常结束还是发生错误。由于它的高度实用性和灵活性,`register_shutdown_function`是PHP开发中不可或缺的工具之一。
62 0
|
5月前
|
缓存 JSON PHP
蓝易云 - PHP中header()的七种用法
设置HTTP认证:例如,使用Basic认证方式:
38 2
|
6月前
|
PHP
php 常见的判断语句和用法
PHP中的判断语句包括if、else、elseif/else if和switch/case。if检查条件执行相关代码;if...else则在条件真假时执行不同代码块;elseif用于多条件检查;switch根据表达式值匹配case执行相应代码,default处理未匹配情况。
75 1
|
11月前
php@符号的用法简介,错误关闭符号
用在函数前,使不显示错误信息,前面的“@”就能把错误显示给抑制住,也就是不会显示错误,然后再抛出异常,显示自己定义的异常处理,添加这个只是为了让浏览者不看到,不友好的页面,并不能抑制住错误,只能抑制显示错误.
37 0
|
JSON PHP 数据格式
PHP =>、->、::、符号用法与含义
PHP =>、->、::、符号用法与含义
97 0
|
前端开发 中间件 API
PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)
PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)
245 0
|
Unix PHP
PHP快速入门05-时间日期与时区,附30个常用案例
PHP中的日期和时间处理功能极其强大,包括了多种格式化、解析、比较等常用操作。本文主要对此讲解。另外给出30个高频使用示范。
176 0