首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP时间函数总结

PHP时间函数总结

作者头像
老高的技术博客
发布于 2022-12-27 13:21:04
发布于 2022-12-27 13:21:04
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

PHP关于时间的函数可以参考这里,可以看到PHP已经提供了很多函数以供我们使用,熟练掌握这些函数可以让你摆脱冗长复杂的计算,希望本文能够让你事半功倍!

ps.关于时间戳与日期的转换工具,博主推荐这个时间戳转换工具

[TOC]

PHP时区设置

在使用PHP与时间有关的时间函数时,一定要先定义时区,否则每次使用时间函数的时候会显示一个Notice级别的错误。

本文中所有的示例都基于中国时间,即GTM+8

固化在文件

再php.ini配置文件里找到被注释掉的

;data.timezone =

改为:

date.timezone = PRC

其中PRC可以换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Asia/Shanghai – 上海
Asia/Chongqing – 重庆
Asia/Urumqi – 乌鲁木齐
Asia/Hong_Kong – 香港
Asia/Macao – 澳门
Asia/Taipei – 台北
Asia/Singapore – 新加坡

运行时定义时区

方法一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ini_set('date.timezone','Asia/Shanghai');

方法二

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
date_default_timezone_set('PRC'); 
//此函数PHP4不存在,考虑到兼容性可以先使用下面的方法用来判断函数是否可用
function_exists(date_default_timezone_set)

时间戳

什么是时间戳(timestamp)?他指的是格林威治时间 1970 年 1 月 1 日 00:00:00到当前时间的秒数,也称Unix时间戳(Unix timestamp)或时间戳。

time

time()函数应该是最简单的时间函数了,该函数不接受参数,返回的是当前时间的时间戳。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo time();
//1410174652

microtime

这个函数与time()类似,他返回当前时间戳以及微秒数,用空格隔开。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo microtime();
//0.55958200 1410174780

为了计算时间,一般会把该函数封装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

mktime

根据参数生成对应的时间戳

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )

例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo mktime(0, 0, 0, 3, 27, 1990);
//638467200
//1990-3-27 00:00:00

下面几种情况值得注意:

小时,分钟和秒

以小时为例,小时的范围应该是0-23,但是如果超过这个范围,会发生什么?请读者结合示例代码自己总结。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo mktime(28, 0, 0, 3, 27, 1990);
//638568000
//1990-3-28 04:00:00

echo mktime(-28, 0, 0, 3, 27, 1990);
//638366400
//1990-3-25 20:00:00

月,日和年

以日为例,其范围应该是1-31,有几个特殊情况需要注意。请看下面示例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo mktime(0, 0, 0, 3, 1, 1990);
//1990-3-01 00:00:00

echo mktime(0, 0, 0, 3, 0, 1990);
//636134400
//1990-2-28 00:00:00
//1变为0,日期提前了一天。

//利用这个特性,我们可以轻易的得出当月的最后一天的日期
echo mktime(0, 0, 0, 4, 0, 1990);
//638812800
//1990-3-31 00:00:00

//也能轻易得出给定月份的天数
echo date( "t", mktime( 0, 0, 0, 2, 1, 2000 ) );
//29

格式化

date

这个函数的作用是把时间戳格式化为指定格式,接受两个参数,第一个为格式,具体写法请参考官方说明,第二个为时间戳,默认为当前时间,即time()

下面的例子可以得到明天,上个月和下一年。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);

strtotime

将任何英文文本的日期时间描述解析为Unix时间戳,这是一个很强大的函数!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int strtotime ( string $time [, int $now = time() ] )

参数1:日期/时间字符串。 参数2:用来计算返回值的时间戳。

注意年月日的顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo date('Y-m-d', strtotime("06/08/2014")), "\n"; 
//2014-06-08

echo date('Y-m-d', strtotime("06-08-2014")), "\n"; 
//2014-08-06

strtotime可以'理解'一些自然语句,十分好用!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo strtotime("2014-03-27"), "\n";
echo strtotime("December 31"), "\n";
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("Saturday"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";

还可以指定日期

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$time = date('Y-m-d H:i:s', time());
echo strtotime($time.'1day'), "\n";
echo "\n";
echo strtotime($time.'-1year'), "\n";
//也可以直接使用时间戳
echo strtotime('-1year', time());, "\n";
strtotime("+1 week", $startdate);

星期数相关

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//获取指定星期数的第一天,参数格式yyyyWww
//最后两个ww指你需要的周数
echo date('Y-m-d H:i:s',strtotime('2014W01')), "\n";
//2014年第一周的第一天
//2013-12-30 00:00:00

//获取指定星期数的第N天,参数格式yyyyWww-N。N的取值范围是1-7
echo date('Y-m-d H:i:s',strtotime('2014W01-5')), "\n";
//2014年第一周的第五天
//2014-01-03 00:00:00

DateTime类

这里是DateTime类文档链接

DateTime类实现了DateTimeInterface接口,它实现了很多关于时间的功能,如时间的比较、修改、创建和格式化等。 创建一个DateTime对象很简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$datetime = new DateTime;  //面向对象
$datetime_specific = new DateTime('2014-03-27'); //面向对象

其主要方法包括:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$datetime->add();            //增加时间
$datetime->sub();            //减少时间
$datetime->modify();         //修改时间
$datetime->format();         //格式化输出
$datetime->setTime();        //设置时间
$datetime->diff();          //对比时间,返回时间差

以上方法在此不展开讲了,有兴趣TX请自己上面的文档学习。

DateInterval类

DateInterval类表示一个时间段,这个类在DateTime的add()sub()还有diff()中会用到,其构造函数里需要传入时间增量

什么是时间增量?

他用来描述一段时间,形如P1Y2M3DT4H5M6S,字母都是大写。其中P后面跟年月日,T后面是时分秒。例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
P1YT1S      1年零一秒
T1H1S       1小时零一秒

理解了时间增量,那么我们来构造一个DateInterval对象吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$eightynine_days_ago = new DateInterval( "P89D" ); 

接下来就可以把他们用在DateTime的add()sub()还有diff()中了。

localtime

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
array localtime ([ int $timestamp = time() [, bool $is_associative = false ]] )

localtime以时间戳为准,返回一个数组,其结构和 C 函数调用返回的完全一样。

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print_r( localtime(strtotime('2014-03-27 12:13:14')) );

Array
(
    [0] => 14
    [1] => 13
    [2] => 12
    [3] => 27
    [4] => 2
    [5] => 114
    [6] => 4
    [7] => 85
    [8] => 0
)

如果第二参数为真,则返回一个关联数组,与之前的索引数组对应。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print_r( localtime(strtotime('2014-03-27 12:13:14'), true) );

Array
(
    [tm_sec] => 14
    [tm_min] => 13
    [tm_hour] => 12
    [tm_mday] => 27
    [tm_mon] => 2
    [tm_year] => 114
    [tm_wday] => 4
    [tm_yday] => 85
    [tm_isdst] => 0
)

说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"tm_sec" - 秒数, 059
"tm_min" - 分钟数, 059
"tm_hour" - 小时, 023
"tm_mday" - 月份中的第几日, 131
"tm_mon" - 年份中的第几个月, 0 (Jan)11 (Dec)
"tm_year" - 年份,从 1900 开始
"tm_wday" - 星期中的第几天, 0 (Sun)6 (Sat)
"tm_yday" - 一年中的第几天, 0365
"tm_isdst" - 夏令时当前是否生效? 如果是生效的是正数, 0 代表未生效,负数代表未知。

日历Calender函数

文档在这儿

老高觉得这Calender函数中最有用的就是这个cal_days_in_month了,他返回某个历法中某年中某月的天数。

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo cal_days_in_month(CAL_GREGORIAN, 2, 2014);
//28

比之前mktime()要简单的多吧。

总结

关于时间的函数就介绍到这儿,由于老高时间有限,许多有趣的函数,如checkdatedate_diff都没有铺开介绍,争取日后补上。

纵观PHP在5.0版本的时间函数,不难发现,PHP为我们提供了一套很简单快捷的函数帮助我们处理时间,而且很多计算的方法不止一种,希望大家掌握本文提供的最基础的函数,然后运用到实际的开发中去。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP中的日期相关函数(三)
之前我们已经介绍过了 PHP 的一些相关的日期操作对象,今天我们就来学习剩下的那些面向过程的使用方式。当然,如果是和 DateTime 类中相似的方法我们就不再进行介绍了。另外,Date() 和 time() 这两个非常常用的函数也不会进行介绍,因为大家都已经用滥了,所以我们也就不浪费宝贵的学习资源了。
硬核项目经理
2021/03/16
2.2K0
常用函数之字符串时间等
mysqli_real_escape_string() — 使用反斜线引用字符串 sql注入
老雷PHP全栈开发
2020/07/02
6880
php如何在某个时间上加一天?一小时? 时间加减
<?php date_default_timezone_set('PRC'); //默认时区 echo "今天:",date("Y-m-d",time()),"<br>"; echo "今天:",da
Yiiven
2022/12/15
3K0
PHP中的日期相关函数(二)
上回文章中我们介绍了三个时间日期相关的对象,不过它们的出镜频率并不是特别地高。今天学习的对象虽说可能不少人使用过,但是它的出镜频率也是非常低的。它们其实就是我们非常常用的那些面向过程的日期函数的面向对象式的封装。但,酒香不怕巷子深,好东西还是值得我们去深入的学习研究的,当然更好的情况是可以在面对不同的业务场景时灵活地使用这些对象才是我们学习的根本目的。
硬核项目经理
2021/02/26
2.5K0
PHP7-1:从0开始入门学习
array_map(function(item){},数组变量) 数组遍历 可以对数组做修改
程序员海军
2021/10/11
2.2K0
PHP7-1:从0开始入门学习
常用模块~PHP时间戳与日期.
自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数 .
汤清丽
2019/11/03
3.9K0
常用模块~PHP时间戳与日期.
PHP全栈学习笔记4
JavaScript是网景公司开发的,是一种基于对象和事件驱动并具有安全性能的解释型脚本语言。
达达前端
2019/07/03
3K0
PHP全栈学习笔记4
php 学习笔记之日期时间操作 原
将当前日期时间或者特定日期时间格式化输出为特定格式的字符串,常用于人性化展示信息.
雪之梦技术驿站
2019/06/01
2.1K0
php参考手册 Date / Time 函数(7.4千字)
<?php //验证是否是验证格利高里日期 var_dump(checkdate(12,31,-400)); echo "<br />"; var_dump(checkdate(2,29,2003))
贵哥的编程之路
2022/05/06
1K0
php参考手册 Date / Time 函数(7.4千字)
PHP获取今天,昨天,本月,上个月,本年 起始时间戳
 PHP获取今天,昨天,本月,上个月,本年 起始时间戳或日期,最新更新时间为2020-04-01
Lansonli
2021/10/09
1.7K0
php 学习笔记之日期时间操作一箩筐
将当前日期时间或者特定日期时间格式化输出为特定格式的字符串,常用于人性化展示信息.
雪之梦技术驿站
2019/05/31
1.8K0
PHP 日期加减计算方法示例
PHP 标准的日期格式 date("Y-m-d H:i:s"); PHP 简单的日期加减计算 1234567891011121314 <?php    date_default_timezone_se
阳光岛主
2018/05/17
2.3K0
【C语言】时间函数详解
在C语言中,时间处理功能由标准库 time.h 提供。使用这些函数时,需要包含 #include <time.h> 头文件。以下是一些常用的时间函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
LuckiBit
2024/12/11
4060
【C语言】时间函数详解
PHP- 日期和时间函数
date(): 获取当前日期和时间 date()函数用于获取当前日期和时间,返回值为一个格式化的日期字符串。
堕落飞鸟
2023/04/26
2.4K0
PHP全栈学习笔记32
php自定义函数之匿名函数 所谓匿名,就是没有名字。 匿名函数,也就是没有函数名的函数。
达达前端
2019/07/03
1K0
PHP全栈学习笔记32
PHP获取当前时间、年份、月份、日期和天数
其中参数 format 为显示格式,参数 timestamp 为时间戳,是可选择的,默认为 time() ,即如果没有给出时间戳则使用本地当前时间。
德顺
2019/11/12
25.5K0
PHP中的日期和时间处理函数详解
在 Web 开发中,处理日期和时间是一个常见的任务。PHP 提供了一系列强大的日期和时间处理函数,例如strtotime、date和DateTimeImmutable::createFromFormat等。
沈唁
2023/10/13
1.2K0
相关推荐
PHP中的日期相关函数(三)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验