返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中的日期相关函数介绍
  • 186
分享到

PHP中的日期相关函数介绍

2023-06-20 13:06:09 186人浏览 薄情痞子
摘要

这篇文章主要介绍“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

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

--结束END--

本文标题: PHP中的日期相关函数介绍

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

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

猜你喜欢
  • PHP中的日期相关函数介绍
    这篇文章主要介绍“PHP中的日期相关函数介绍”,在日常操作中,相信很多人在PHP中的日期相关函数介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中的日期相关函数介绍”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • PHP日期相关函数的介绍及用法
    这篇文章主要介绍“PHP日期相关函数的介绍及用法”,在日常操作中,相信很多人在PHP日期相关函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP日期相关函数的介绍及用法”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • php中日期相关函数有哪些
    php中日期相关的函数有date_create、date_diff、strtotime、microtime常见的几种date_create函数date_create函数作用:php中date_create函数的作用是用于返回一个新的Date...
    99+
    2024-04-02
  • PHP的时间与日期相关函数
    PHP作为一种流行的编程语言,针对时间与日期相关的操作,提供了丰富的内置函数库。在日常的开发中,我们经常需要使用到这些函数,比如获取当前时间、格式化日期等操作。在本文中,我们将介绍一些常用的时间与日期相关的函数,以及它们的用法与示例。时间戳...
    99+
    2023-05-23
    PHP时间函数 PHP日期函数 时间戳函数
  • MySQL日期相关函数
    MySQL中,字符串的年月日时分秒按照 yyyy-mm-dd HH:mm:ss 这种格式排列,那这个字符串就是日期 1、 curdate() :获取年月日 select curdate(); -- 2023-02-04 curtime()...
    99+
    2023-08-30
    mysql 数据库 sql
  • mysql中的日期和时间函数介绍
    本篇文章给大家分享的是有关mysql中的日期和时间函数介绍,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。mysql日期和时间函数有:一:mys...
    99+
    2024-04-02
  • php的ini文件相关操作函数的详细介绍
    本篇内容介绍了“php的ini文件相关操作函数的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在小公司,特别是创业型公司,整个服务器...
    99+
    2023-06-20
  • MySQL中常用的日期相关函数有哪些
    这篇文章主要介绍了MySQL中常用的日期相关函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。目录第一部分:时间差函数 timesta...
    99+
    2024-04-02
  • SQL高级日期函数的相关用法
    这篇文章主要讲解了“SQL高级日期函数的相关用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL高级日期函数的相关用法”吧!测试环境SQL Server...
    99+
    2024-04-02
  • mysql中的日期相减的天数函数
    目录mysql日期相减的天数函数语法实例例子 1例子 2mysql中日期相减的部分函数两个日期相减,得到相差的分钟两个日期相减的到相差的小时总结mysql日期相减的天数函数 DATEDIFF() 函数返回两个日期之间的天...
    99+
    2023-02-06
    mysql日期相减的天数 mysql日期相减 mysql日期函数
  • PHP日期函数实现时间相关功能的方法总结
    PHP日期函数是PHP语言中的一个重要特性,可以实现各种时间相关的功能。在本篇文章中,将总结一些常用的PHP日期函数的用法,帮助读者更好地理解和使用它们。一、获取当前时间PHP日期函数中最常用的一个函数就是date()函数,可以获取当前的日...
    99+
    2023-11-20
    格式化日期 比如获取当前日期 计算日期之间的差距等。 获取指定日期的时间戳
  • MySQL中的相关工具介绍
    这篇文章主要介绍“MySQL中的相关工具介绍”,在日常操作中,相信很多人在MySQL中的相关工具介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL中的相关工具介绍”...
    99+
    2024-04-02
  • mysql日期和时间相关函数有哪些
    这篇文章主要为大家展示了“mysql日期和时间相关函数有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql日期和时间相关函数有哪些”这篇文章吧。  函...
    99+
    2024-04-02
  • C++模板函数重载的相关介绍和用法
    本篇内容介绍了“C++模板函数重载的相关介绍和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实例化后的模版函数如果和某个非模版函数的调用...
    99+
    2023-06-17
  • PHP函数介绍:strlen()函数
    PHP函数介绍:strlen()函数strlen()函数是PHP中常用的一个字符串处理函数,它的作用是计算字符串的长度(包括空格和特殊字符,但不包括null字符)。strlen()函数的语法格式如下:int strlen ( string ...
    99+
    2023-11-03
    函数 PHP strlen()
  • PHP函数介绍:array_column()函数
    PHP函数介绍:array_column()函数引言:在PHP编程中,我们经常需要从多维数组中提取特定键的值,这时就可以使用array_column()函数。本文将详细介绍array_column()函数的用法和代码示例。array_col...
    99+
    2023-11-03
    PHP函数 函数介绍 array_column()函数
  • PHP函数介绍:file_get_contents()函数
    PHP函数介绍:file_get_contents()函数在开发PHP应用程序时,我们经常需要读取文件内容。而PHP中的file_get_contents()函数提供了一种简单而高效的方法来实现这个目标。这个函数可以读取一个文件,并将其内容...
    99+
    2023-11-03
    PHP函数介绍:file_get_contents() PHP file_get_contents()函数 file_g
  • PHP函数介绍:strtr()函数
    PHP函数介绍:strtr()函数在PHP编程中,strtr()函数是一个非常有用的字符串替换函数。它用于将字符串中的指定字符或字符串替换为其他字符或字符串。本文将介绍strtr()函数的用法,并给出一些具体的代码示例。strtr()函数的...
    99+
    2023-11-03
    PHP函数 介绍 strtr()函数
  • PHP函数介绍:is_callable()函数
    PHP函数介绍:is_callable()函数在PHP中,is_callable()函数用于检查一个函数或方法是否可调用。它返回一个布尔值,如果可调用则返回true,否则返回false。这个函数对于动态调用函数或方法时非常有用,它可以帮助我...
    99+
    2023-11-03
    PHP函数 介绍 is_callable
  • PHP函数介绍:file_put_contents()函数
    PHP函数介绍:file_put_contents()函数在PHP开发中,处理文件是很常见的任务。其中,file_put_contents()函数在操作文件时非常实用。它允许我们以一种简单且高效的方式向文件中写入内容,无需单独打开和关闭文件...
    99+
    2023-11-03
    PHP函数 介绍 file_put_contents()
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作