广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP日期相关函数的介绍及用法
  • 402
分享到

PHP日期相关函数的介绍及用法

2023-06-20 13:06:48 402人浏览 泡泡鱼
摘要

这篇文章主要介绍“PHP日期相关函数的介绍及用法”,在日常操作中,相信很多人在php日期相关函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP日期相关函数的介绍及用法”的疑惑有所帮助!接下来

这篇文章主要介绍“PHP日期相关函数的介绍及用法”,在日常操作中,相信很多人在php日期相关函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP日期相关函数的介绍及用法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

日期相关的操作函数是我们在日常的工作开发中最常接触到的功能。当然,大部分同学可能最多用到的就是 date() 、 time() 这两个函数,我们今天先不讲这两个函数,或许后面的文章也不太会讲它们,毕竟太常用了。本身在对手册文档的学习中,就是要发掘有意思的或者没有接触过的一些功能函数,所以我们今天的学习的函数可能是大家都没怎么用过的,甚至可能很多大家都没见过的。

时区类相关函数

首先就是时区类的一个对象。它可以帮助我们获取一些当前时区相关的信息。

$timezone = new DateTimeZone('Asia/Shanghai');var_dump($timezone);// object(DateTimeZone)#1 (2) {//     ["timezone_type"]=>//     int(3)//     ["timezone"]=>//     string(13) "Asia/Shanghai"//   }

在实例化这个 DateTimeZone 时区类时,需要传递一个时区参数。这里我们给的就是通用的中国时区的设置,虽说我们的国际标准时区是东八区的北京时间,但在 PHP 中的时区格式中,我们的时区是以上海为命名的。

这个时区类可以直接获得当前指定时区的定位信息,比如 Asia/Shanghai 的定位信息就是直接定位到上海市的。

// 时区相关的定位信息var_dump($timezone->getLocation());// array(4) {//     ["country_code"]=>//     string(2) "CN"//     ["latitude"]=>//     float(31.23333)//     ["longitude"]=>//     float(121.46666)//     ["comments"]=>//     string(12) "Beijing Time"//   }

通过 getLocation() 就可以获取到时区类的定位信息,经纬度的查询结果就是上海市中心,comments 字段也明确地指出了当前时区是北京时间。

// 时区名称var_dump($timezone->getName());// string(13) "Asia/Shanghai"// 相对于 GMT 的时差var_dump($timezone->getOffset(new DateTime('now', $timezone)));// int(28800)// 所有时区转换信息var_dump($timezone->getTransitions(time()));// array(1) {//     [0]=>//     array(5) {//       ["ts"]=>//       int(1601168813)//       ["time"]=>//       string(24) "2020-09-27T01:06:53+0000"//       ["offset"]=>//       int(28800)//       ["isdst"]=>//       bool(false)//       ["abbr"]=>//       string(3) "CST"//     }//   }

getName() 方法获取的是当前时区的名称,这个就不用多说了。getOffset() 则是获取到与国际格林尼治时间(GMT)的差值,也就是与子午线的时间间隔,这里返回的是秒,转换成小时后正好就是 8 小时。getTransitions() 函数返回的是所有时区转换的时间,我测试的时间是早上,返回的 time 字段内容是格林尼治时间,offset 字段返回的也是与GMT时间的差值。GMT时间与UTC时间是一致的,我们在日常的学习和工作中如果接触到了这两个名词可以将它们看做是相同的概念。

UTC时间的标准叫法是协调世界时间,基于国际原子时间,全世界的国家的标准时间都是以它为标准进行调校的,而GMT的本意是定位为本初子午线的平太阳时,UTC也是以这条经线为基准进行时区划分的。不过,按照严格的标准来说,它们并不是完全相等的,具体的内容大家可以自行查阅,但对于我们日常开发来说,完全可以将它们视为等同的东西。

// 包含 dst (夏令时),时差和时区信息的关联数组var_dump(DateTimeZone::listAbbreviations());// array(144) {//     ["acdt"]=>//     array(6) {//       [0]=>//       array(3) {//         ["dst"]=>//         bool(true)//         ["offset"]=>//         int(37800)//         ["timezone_id"]=>//         string(18) "Australia/Adelaide"//       }//       [1]=>//       array(3) {//         ["dst"]=>//         bool(true)//         ["offset"]=>//         int(37800)//         ["timezone_id"]=>//         string(21) "Australia/Broken_Hill"//       }//     ……//     ……// 包含了所有时区标示符的索引数组var_dump(DateTimeZone::listIdentifiers());// array(426) {//     [0]=>//     string(14) "Africa/Abidjan"//     [1]=>//     string(12) "Africa/Accra"//     [2]=>//     string(18) "Africa/Addis_Ababa"//     [3]=>//     string(14) "Africa/Algiers"//     ……//     ……

listAbbreviations() 静态方法返回的是 夏令时 相关的时差和时区信息。夏令时 和 冬令时 也是西方国家的一种生活标准,我们接触的不多,这里就不做讲解了,对于做跨境项目或者欧美外包的同学应该不会陌生。listIdentifiers() 方法返回的是包含了所有时区标示符的索引数组,这里可以看到所有的支持的时区信息。

日期间隔操作

对时日期时间的间隔操作,或许大家多少都做过一点,比如 DateTime 对象的那个 diff() 方法。

$today = new DateTime('2020-09-27');$beforeYestoday = new DateTime("2020-09-25");var_dump($today->diff($beforeYestoday));// object(DateInterval)#5 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(2)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(1)//     ["days"]=>//     int(2)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

从打印的结果可以看出,diff() 对象返回的是一个 DateInterval 对象。这个就是我们这节的主角了,关于它打印出来的这些属性内容就不多解释了,字段名已经非常直观了,值就是具体的差值。

$interval = new DateInterval("P2D");var_dump($interval);// object(DateInterval)#2 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(2)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

看到没有?打印出来的内容和上面用 diff() 方法返回的对象的内容是一致的,但是它的构造函数的参数很奇怪。没错,当我们自己去实例化一个 DateInterval 对象时,需要为它定义它的间隔信息,这个间隔信息就是我们通过构造函数的参数传递进去的。P2D 的意思就是间隔 2 天,首先必须以一个 P 为开头,然后可以有 Y、M、D 这些日期内容,如果需要时间内容的话,需要一个 T 然后再跟上 H、M、S 这些内容。比如 P2Y4DT6H8M 表示的就是 2年4天6小时8分钟 的时间间隔。具体的规则大家还是去看文档中的说明:https://www.php.net/manual/zh/dateinterval.construct.php。

$interval = new DateInterval("P2Y4DT6H8M");var_dump($interval);// object(DateInterval)#5 (16) {//     ["y"]=>//     int(2)//     ["m"]=>//     int(0)//     ["d"]=>//     int(4)//     ["h"]=>//     int(6)//     ["i"]=>//     int(8)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

我们还可以通过字段串形式的日期数据返回间隔对象,比如:

// 从日期语句创建时间间隔var_dump(DateInterval::createFromDateString('2 days'));// object(DateInterval)#3 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(2)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

此外,在获得对象后进行输出的时候,DateInterval 对象也为我们提供了一个 fORMat() 方法,可以像 printf() 函数一样来格式化地输出日期信息,而且这里用的格式符还是日期的格式符。

var_dump($interval->format('%y %d %h %i'));// string(7) "2 4 6 8"

输出的内容其实就是属性中对应的那些日期和时间差值。

时间周期相关函数

说完时间间隔了,我们再来看看时间周期。时间周期是个什么概念呢?就比如说我们要每三天间隔一次地获取日期,这时就可以用时间周期相关的类来进行处理。

$start = new DateTime('2020-09-01');$interval = new DateInterval('P7D');$end = new DateTime('2020-09-30');$daterange = new DatePeriod($start, $interval ,$end);var_dump($daterange);// object(DatePeriod)#7 (6) {//     ["start"]=>//     object(DateTime)#8 (3) {//       ["date"]=>//       string(26) "2020-09-01 00:00:00.000000"//       ["timezone_type"]=>//       int(3)//       ["timezone"]=>//       string(13) "Asia/Shanghai"//     }//     ["current"]=>//     NULL//     ["end"]=>//     object(DateTime)#9 (3) {//       ["date"]=>//       string(26) "2020-09-30 00:00:00.000000"//       ["timezone_type"]=>//       int(3)//       ["timezone"]=>//       string(13) "Asia/Shanghai"//     }//     ["interval"]=>//     object(DateInterval)#10 (16) {//       ["y"]=>//       int(0)//       ["m"]=>//       int(0)//       ["d"]=>//       int(7)//       ["h"]=>//       int(0)//       ["i"]=>//       int(0)//       ["s"]=>//       int(0)//       ["f"]=>//       float(0)//       ["weekday"]=>//       int(0)//       ["weekday_behavior"]=>//       int(0)//       ["first_last_day_of"]=>//       int(0)//       ["invert"]=>//       int(0)//       ["days"]=>//       bool(false)//       ["special_type"]=>//       int(0)//       ["special_amount"]=>//       int(0)//       ["have_weekday_relative"]=>//       int(0)//       ["have_special_relative"]=>//       int(0)//     }//     ["recurrences"]=>//     int(1)//     ["include_start_date"]=>//     bool(true)//   }foreach($daterange as $date){    echo $date->format("Ymd"), PHP_EOL;}// 20200901// 20200908// 20200915// 20200922// 20200929

首先设定了开始时间和结束时间以及一个时间间隔对象,然后用它们做为参数来生成一个 DatePeriod 时间周期对象。它是一个实现了迭代器的对象,所以我们可以直接遍历它,结果就是以 P7D ,也就是 7 天为间隔的一组日期数据。

var_dump($daterange->getDateInterval());// object(DateInterval)#11 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(7)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }var_dump($daterange->getStartDate());// object(DateTime)#11 (3) {//     ["date"]=>//     string(26) "2020-09-01 00:00:00.000000"//     ["timezone_type"]=>//     int(3)//     ["timezone"]=>//     string(13) "Asia/Shanghai"//   }var_dump($daterange->getEndDate());// object(DateTime)#11 (3) {//     ["date"]=>//     string(26) "2020-09-30 00:00:00.000000"//     ["timezone_type"]=>//     int(3)//     ["timezone"]=>//     string(13) "Asia/Shanghai"//   }

它的这一堆方法其实返回的就是我们定义的那些构造参数信息。另外,它还可以指定从开始日期往后按照时间间隔返回几条信息。

$period = new DatePeriod($start, $interval, 4);foreach($period as $date){    echo $date->format("Ymd"), PHP_EOL;}// 20200901// 20200908// 20200915// 20200922// 20200929var_dump($period->getRecurrences());// int(4)

recurrences 参数的作用就是按照指定的时间间隔返回几条信息,这里我们是返回 9月1号 之后每次间隔 7 天的 4 条信息,和上面的内容一样。这时我们修改构造函数的值为其它数量,比如修改为 2 ,那么就只会返回到 9月15号 的信息了。它不会受到结束日期的约束,可以返回从开始日期到指定数量之后的所有信息,大家可以自己尝试一下。

总结

今天学习的内容不知道大家有没有接触过,反正我是只用过 diff() 方法来处理过日期之间的差值问题,而且也并没有注意到过它返回的这个对象具体的内容。而另外两个对象则是压根没有印象,完全就是没听说过的感觉。所以说,平常多刷刷手册还是非常有帮助的,今天学习的内容又让我们知道了很多东西,而且 DatePeriod 在具体的业务实现中是肯定会有使用场景的。学习不止,后面我们要学习的内容依然精彩。

测试代码:

Https://GitHub.com/zhangyue0503/dev-blog/blob/master/php/202009/source/12.PHP中的日期相关函数(一).php

参考文档:

https://www.php.net/manual/zh/book.datetime.php

各自媒体平台均可搜索【硬核项目经理】

php

阅读 46

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

PHP日期相关函数的介绍及用法

硬核项目经理

32 声望

6 粉丝

0 条评论

得票数最新

PHP日期相关函数的介绍及用法

你知道吗?

PHP日期相关函数的介绍及用法

硬核项目经理

32 声望

6 粉丝

宣传栏
目录

日期相关的操作函数是我们在日常的工作开发中最常接触到的功能。当然,大部分同学可能最多用到的就是 date() 、 time() 这两个函数,我们今天先不讲这两个函数,或许后面的文章也不太会讲它们,毕竟太常用了。本身在对手册文档的学习中,就是要发掘有意思的或者没有接触过的一些功能函数,所以我们今天的学习的函数可能是大家都没怎么用过的,甚至可能很多大家都没见过的。

时区类相关函数

首先就是时区类的一个对象。它可以帮助我们获取一些当前时区相关的信息。

$timezone = new DateTimeZone('Asia/Shanghai');var_dump($timezone);// object(DateTimeZone)#1 (2) {//     ["timezone_type"]=>//     int(3)//     ["timezone"]=>//     string(13) "Asia/Shanghai"//   }

在实例化这个 DateTimeZone 时区类时,需要传递一个时区参数。这里我们给的就是通用的中国时区的设置,虽说我们的国际标准时区是东八区的北京时间,但在 PHP 中的时区格式中,我们的时区是以上海为命名的。

这个时区类可以直接获得当前指定时区的定位信息,比如 Asia/Shanghai 的定位信息就是直接定位到上海市的。

// 时区相关的定位信息var_dump($timezone->getLocation());// array(4) {//     ["country_code"]=>//     string(2) "CN"//     ["latitude"]=>//     float(31.23333)//     ["longitude"]=>//     float(121.46666)//     ["comments"]=>//     string(12) "Beijing Time"//   }

通过 getLocation() 就可以获取到时区类的定位信息,经纬度的查询结果就是上海市中心,comments 字段也明确地指出了当前时区是北京时间。

// 时区名称var_dump($timezone->getName());// string(13) "Asia/Shanghai"// 相对于 GMT 的时差var_dump($timezone->getOffset(new DateTime('now', $timezone)));// int(28800)// 所有时区转换信息var_dump($timezone->getTransitions(time()));// array(1) {//     [0]=>//     array(5) {//       ["ts"]=>//       int(1601168813)//       ["time"]=>//       string(24) "2020-09-27T01:06:53+0000"//       ["offset"]=>//       int(28800)//       ["isdst"]=>//       bool(false)//       ["abbr"]=>//       string(3) "CST"//     }//   }

getName() 方法获取的是当前时区的名称,这个就不用多说了。getOffset() 则是获取到与国际格林尼治时间(GMT)的差值,也就是与子午线的时间间隔,这里返回的是秒,转换成小时后正好就是 8 小时。getTransitions() 函数返回的是所有时区转换的时间,我测试的时间是早上,返回的 time 字段内容是格林尼治时间,offset 字段返回的也是与GMT时间的差值。GMT时间与UTC时间是一致的,我们在日常的学习和工作中如果接触到了这两个名词可以将它们看做是相同的概念。

UTC时间的标准叫法是协调世界时间,基于国际原子时间,全世界的国家的标准时间都是以它为标准进行调校的,而GMT的本意是定位为本初子午线的平太阳时,UTC也是以这条经线为基准进行时区划分的。不过,按照严格的标准来说,它们并不是完全相等的,具体的内容大家可以自行查阅,但对于我们日常开发来说,完全可以将它们视为等同的东西。

// 包含 dst (夏令时),时差和时区信息的关联数组var_dump(DateTimeZone::listAbbreviations());// array(144) {//     ["acdt"]=>//     array(6) {//       [0]=>//       array(3) {//         ["dst"]=>//         bool(true)//         ["offset"]=>//         int(37800)//         ["timezone_id"]=>//         string(18) "Australia/Adelaide"//       }//       [1]=>//       array(3) {//         ["dst"]=>//         bool(true)//         ["offset"]=>//         int(37800)//         ["timezone_id"]=>//         string(21) "Australia/Broken_Hill"//       }//     ……//     ……// 包含了所有时区标示符的索引数组var_dump(DateTimeZone::listIdentifiers());// array(426) {//     [0]=>//     string(14) "Africa/Abidjan"//     [1]=>//     string(12) "Africa/Accra"//     [2]=>//     string(18) "Africa/Addis_Ababa"//     [3]=>//     string(14) "Africa/Algiers"//     ……//     ……

listAbbreviations() 静态方法返回的是 夏令时 相关的时差和时区信息。夏令时 和 冬令时 也是西方国家的一种生活标准,我们接触的不多,这里就不做讲解了,对于做跨境项目或者欧美外包的同学应该不会陌生。listIdentifiers() 方法返回的是包含了所有时区标示符的索引数组,这里可以看到所有的支持的时区信息。

日期间隔操作

对时日期时间的间隔操作,或许大家多少都做过一点,比如 DateTime 对象的那个 diff() 方法。

$today = new DateTime('2020-09-27');$beforeYestoday = new DateTime("2020-09-25");var_dump($today->diff($beforeYestoday));// object(DateInterval)#5 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(2)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(1)//     ["days"]=>//     int(2)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

从打印的结果可以看出,diff() 对象返回的是一个 DateInterval 对象。这个就是我们这节的主角了,关于它打印出来的这些属性内容就不多解释了,字段名已经非常直观了,值就是具体的差值。

$interval = new DateInterval("P2D");var_dump($interval);// object(DateInterval)#2 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(2)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

看到没有?打印出来的内容和上面用 diff() 方法返回的对象的内容是一致的,但是它的构造函数的参数很奇怪。没错,当我们自己去实例化一个 DateInterval 对象时,需要为它定义它的间隔信息,这个间隔信息就是我们通过构造函数的参数传递进去的。P2D 的意思就是间隔 2 天,首先必须以一个 P 为开头,然后可以有 Y、M、D 这些日期内容,如果需要时间内容的话,需要一个 T 然后再跟上 H、M、S 这些内容。比如 P2Y4DT6H8M 表示的就是 2年4天6小时8分钟 的时间间隔。具体的规则大家还是去看文档中的说明:https://www.php.net/manual/zh/dateinterval.construct.php。

$interval = new DateInterval("P2Y4DT6H8M");var_dump($interval);// object(DateInterval)#5 (16) {//     ["y"]=>//     int(2)//     ["m"]=>//     int(0)//     ["d"]=>//     int(4)//     ["h"]=>//     int(6)//     ["i"]=>//     int(8)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

我们还可以通过字段串形式的日期数据返回间隔对象,比如:

// 从日期语句创建时间间隔var_dump(DateInterval::createFromDateString('2 days'));// object(DateInterval)#3 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(2)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }

此外,在获得对象后进行输出的时候,DateInterval 对象也为我们提供了一个 format() 方法,可以像 printf() 函数一样来格式化地输出日期信息,而且这里用的格式符还是日期的格式符。

var_dump($interval->format('%y %d %h %i'));// string(7) "2 4 6 8"

输出的内容其实就是属性中对应的那些日期和时间差值。

时间周期相关函数

说完时间间隔了,我们再来看看时间周期。时间周期是个什么概念呢?就比如说我们要每三天间隔一次地获取日期,这时就可以用时间周期相关的类来进行处理。

$start = new DateTime('2020-09-01');$interval = new DateInterval('P7D');$end = new DateTime('2020-09-30');$daterange = new DatePeriod($start, $interval ,$end);var_dump($daterange);// object(DatePeriod)#7 (6) {//     ["start"]=>//     object(DateTime)#8 (3) {//       ["date"]=>//       string(26) "2020-09-01 00:00:00.000000"//       ["timezone_type"]=>//       int(3)//       ["timezone"]=>//       string(13) "Asia/Shanghai"//     }//     ["current"]=>//     NULL//     ["end"]=>//     object(DateTime)#9 (3) {//       ["date"]=>//       string(26) "2020-09-30 00:00:00.000000"//       ["timezone_type"]=>//       int(3)//       ["timezone"]=>//       string(13) "Asia/Shanghai"//     }//     ["interval"]=>//     object(DateInterval)#10 (16) {//       ["y"]=>//       int(0)//       ["m"]=>//       int(0)//       ["d"]=>//       int(7)//       ["h"]=>//       int(0)//       ["i"]=>//       int(0)//       ["s"]=>//       int(0)//       ["f"]=>//       float(0)//       ["weekday"]=>//       int(0)//       ["weekday_behavior"]=>//       int(0)//       ["first_last_day_of"]=>//       int(0)//       ["invert"]=>//       int(0)//       ["days"]=>//       bool(false)//       ["special_type"]=>//       int(0)//       ["special_amount"]=>//       int(0)//       ["have_weekday_relative"]=>//       int(0)//       ["have_special_relative"]=>//       int(0)//     }//     ["recurrences"]=>//     int(1)//     ["include_start_date"]=>//     bool(true)//   }foreach($daterange as $date){    echo $date->format("Ymd"), PHP_EOL;}// 20200901// 20200908// 20200915// 20200922// 20200929

首先设定了开始时间和结束时间以及一个时间间隔对象,然后用它们做为参数来生成一个 DatePeriod 时间周期对象。它是一个实现了迭代器的对象,所以我们可以直接遍历它,结果就是以 P7D ,也就是 7 天为间隔的一组日期数据。

var_dump($daterange->getDateInterval());// object(DateInterval)#11 (16) {//     ["y"]=>//     int(0)//     ["m"]=>//     int(0)//     ["d"]=>//     int(7)//     ["h"]=>//     int(0)//     ["i"]=>//     int(0)//     ["s"]=>//     int(0)//     ["f"]=>//     float(0)//     ["weekday"]=>//     int(0)//     ["weekday_behavior"]=>//     int(0)//     ["first_last_day_of"]=>//     int(0)//     ["invert"]=>//     int(0)//     ["days"]=>//     bool(false)//     ["special_type"]=>//     int(0)//     ["special_amount"]=>//     int(0)//     ["have_weekday_relative"]=>//     int(0)//     ["have_special_relative"]=>//     int(0)//   }var_dump($daterange->getStartDate());// object(DateTime)#11 (3) {//     ["date"]=>//     string(26) "2020-09-01 00:00:00.000000"//     ["timezone_type"]=>//     int(3)//     ["timezone"]=>//     string(13) "Asia/Shanghai"//   }var_dump($daterange->getEndDate());// object(DateTime)#11 (3) {//     ["date"]=>//     string(26) "2020-09-30 00:00:00.000000"//     ["timezone_type"]=>//     int(3)//     ["timezone"]=>//     string(13) "Asia/Shanghai"//   }

它的这一堆方法其实返回的就是我们定义的那些构造参数信息。另外,它还可以指定从开始日期往后按照时间间隔返回几条信息。

$period = new DatePeriod($start, $interval, 4);foreach($period as $date){    echo $date->format("Ymd"), PHP_EOL;}// 20200901// 20200908// 20200915// 20200922// 20200929var_dump($period->getRecurrences());// int(4)

recurrences 参数的作用就是按照指定的时间间隔返回几条信息,这里我们是返回 9月1号 之后每次间隔 7 天的 4 条信息,和上面的内容一样。这时我们修改构造函数的值为其它数量,比如修改为 2 ,那么就只会返回到 9月15号 的信息了。它不会受到结束日期的约束,可以返回从开始日期到指定数量之后的所有信息,大家可以自己尝试一下。

总结

今天学习的内容不知道大家有没有接触过,反正我是只用过 diff() 方法来处理过日期之间的差值问题,而且也并没有注意到过它返回的这个对象具体的内容。而另外两个对象则是压根没有印象,完全就是没听说过的感觉。所以说,平常多刷刷手册还是非常有帮助的,今天学习的内容又让我们知道了很多东西,而且 DatePeriod 在具体的业务实现中是肯定会有使用场景的。学习不止,后面我们要学习的内容依然精彩。

测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/12.PHP中的日期相关函数(一).php参考文档:https://www.php.net/manual/zh/book.datetime.php

到此,关于“PHP日期相关函数的介绍及用法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: PHP日期相关函数的介绍及用法

本文链接: https://www.lsjlt.com/news/297176.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP日期相关函数的介绍及用法
    这篇文章主要介绍“PHP日期相关函数的介绍及用法”,在日常操作中,相信很多人在PHP日期相关函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP日期相关函数的介绍及用法”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • PHP中的日期相关函数介绍
    这篇文章主要介绍“PHP中的日期相关函数介绍”,在日常操作中,相信很多人在PHP中的日期相关函数介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中的日期相关函数介绍”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • PHP的时间与日期相关函数
    PHP作为一种流行的编程语言,针对时间与日期相关的操作,提供了丰富的内置函数库。在日常的开发中,我们经常需要使用到这些函数,比如获取当前时间、格式化日期等操作。在本文中,我们将介绍一些常用的时间与日期相关的函数,以及它们的用法与示例。时间戳...
    99+
    2023-05-23
    PHP时间函数 PHP日期函数 时间戳函数
  • SQL高级日期函数的相关用法
    这篇文章主要讲解了“SQL高级日期函数的相关用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL高级日期函数的相关用法”吧!测试环境SQL Server...
    99+
    2022-10-18
  • php中日期相关函数有哪些
    php中日期相关的函数有date_create、date_diff、strtotime、microtime常见的几种date_create函数date_create函数作用:php中date_create函数的作用是用于返回一个新的Date...
    99+
    2022-10-22
  • 介绍golang的%用法及相关知识
    在Go语言中,我们经常会用到%来进行格式化输出操作,%用法非常灵活,下面我们就来介绍一下golang的%用法及相关知识。基本用法:%用法最基本的形式就是用它将变量替换为指定的格式。例如下面代码将i替换为%d,%d表示输出变量i为十进制整数。...
    99+
    2023-05-14
  • C++模板函数重载的相关介绍和用法
    本篇内容介绍了“C++模板函数重载的相关介绍和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实例化后的模版函数如果和某个非模版函数的调用...
    99+
    2023-06-17
  • mysql中的日期和时间函数介绍
    本篇文章给大家分享的是有关mysql中的日期和时间函数介绍,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。mysql日期和时间函数有:一:mys...
    99+
    2022-10-18
  • PHP日期函数实现时间相关功能的方法总结
    PHP日期函数是PHP语言中的一个重要特性,可以实现各种时间相关的功能。在本篇文章中,将总结一些常用的PHP日期函数的用法,帮助读者更好地理解和使用它们。一、获取当前时间PHP日期函数中最常用的一个函数就是date()函数,可以获取当前的日...
    99+
    2023-11-20
    格式化日期 比如获取当前日期 计算日期之间的差距等。 获取指定日期的时间戳
  • php的ini文件相关操作函数的详细介绍
    本篇内容介绍了“php的ini文件相关操作函数的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在小公司,特别是创业型公司,整个服务器...
    99+
    2023-06-20
  • MySQL中常用的日期相关函数有哪些
    这篇文章主要介绍了MySQL中常用的日期相关函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目录第一部分:时间差函数 timesta...
    99+
    2022-10-18
  • VBS中字符串及日期操作相关函数有哪些
    这篇文章主要介绍了VBS中字符串及日期操作相关函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Asc(x),Chr(x):转换字符,字符码 2. Filter:搜寻...
    99+
    2023-06-08
  • Python匿名函数的介绍及用法
    这篇文章主要介绍“Python匿名函数的介绍及用法”,在日常操作中,相信很多人在Python匿名函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python匿名函数的介绍及用法”的疑惑有所帮助!...
    99+
    2023-06-15
  • Python中关于函数的具体用法范例以及介绍
    目录1.函数的介绍2.函数的定义和调用3.函数的参数4.参数的分类4.1.位置参数4.2.关键字参数4.3.缺省参数4.4.不定长参数1.不定长参数*args2.不定长参数* * k...
    99+
    2022-11-12
  • redis的list数据类型相关命令介绍及使用
    目录list列表简介常用命令添加命令查询命令弹出/删除命令修改命令阻塞弹出命令应用场景list列表简介 list是简单的字符串列表(说通俗点,存储的还是字符串),按照插入顺序排序。你...
    99+
    2022-11-12
  • C语言中函数的介绍及用法
    本篇内容介绍了“C语言中函数的介绍及用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录函数定义库函数定义介绍Example 1 strc...
    99+
    2023-06-20
  • Mysql日期格式以及内置日期函数用法详解
    目录一、mysql中的日期时间类型二、mysql中获取时间戳三、mysql中datetime类型的长度位数四、mysql常用时间函数五、日期时间计算函数总结一、MySQL中的日期时间类型 MySQL中常用的几种时间类型有...
    99+
    2023-05-12
    MySQL时间格式 mysql创建时间类型字段 MySQL数据库日期
  • mysql日期函数的用法
    这篇文章主要讲解了“mysql日期函数的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql日期函数的用法”吧!啥也不说,先记录一条sqlselec...
    99+
    2022-10-18
  • CentOS下常见的系统服务以及相关的关闭方法介绍
    这篇文章主要介绍“CentOS下常见的系统服务以及相关的关闭方法介绍”,在日常操作中,相信很多人在CentOS下常见的系统服务以及相关的关闭方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CentOS下...
    99+
    2023-06-10
  • php flock函数介绍和使用方法
    这篇文章为大家带来有关php中flock函数的详细介绍。大部分实例都可以应用到工作中,为此分享给大家做个参考。一起跟随小编过来看看吧。bool flock ( resource $handle , int ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作