之前我们介绍过PHP中一些相关的日期操作对象,今天就来学习剩下的面向过程的使用方法。当然,如果是类似于DateTime类的方法,我们就不再介绍了。另外,Date()和time()这两个非常常用的函数就不做介绍了,因为大家用的太多了,就不浪费宝贵的学习资源了。检查日期首先,让我们学习一个检查日期是否正确的函数。var_dump(检查日期(2、29、2020));//bool(true)var_dump(checkdate(2,29,2021));//bool(false)2020年是闰年,所以有2月29日,而2021年没有2月29日,checkdate()函数用来检查给定的日期是否正确。它的参数顺序是month,day,year,都是必填参数。时区的获取和设置关于时区内容的学习,在DateTimeZone类的学习中已经有详细的讲解。在面向进程的方式中,我们还可以通过两个简单的函数信息获取和设置当前系统运行环境的时区。var_dump(date_default_timezone_get());//string(13)"亚洲/上海"var_dump(date("Y-m-dH:i:s"));//string(19)"2020-10-0908:41:11"date_default_timezone_set("亚洲/东京");var_dump(date("Y-m-dH:i:s"));//string(19)"2020-10-0909:41:11"可以使用date_default_timezone_get()获取当前系统环境下的时区信息,有优先顺序。最优先的是date_default_timezone_set()设置的时区,其次是php.ini文件中设置的时区信息。最后,如果没有设置的话,会根据操作系统的时区设置来决定我们运行环境中的时区在哪里。格式转换日期这里的转换日期其实就是将日期内容输出为一个明细数组。print_r(date_parse("2020-12-1210:00:00.5"));//数组//(//[年]=>2020//[月]=>12//[日]=>12//[hour]=>10//[minute]=>0//[second]=>0//[fraction]=>0.5//[warning_count]=>0//[warnings]=>Array//(//)//[error_count]=>0//[errors]=>Array//(//)//[is_localtime]=>//)$date="6.1.202013:00+01:00";print_r(date_parse_from_format("j.n.YH:iP",$date));//数组//(//[年]=>2020//[月]=>1//[日]=>6//[hour]=>13//[minute]=>0//[second]=>0//[fraction]=>0//[warning_count]=>0//[warnings]=>Array//(//)//[error_count]=>0//[errors]=>Array//(//)//[is_localtime]=>1//[zone_type]=>1//[zone]=>3600//[is_dst]=>//)date_parse()与date_parse_from_format()是将日期内容转换成详细数组的函数。它们的区别在于date_parse_from_format()函数可以指定日期和格式,这样传入的日期内容就可以是它们生成的数组中各种格式的内容字段,名字很清楚,包括年,月,小时、分钟、错误信息等。计算太阳升起和落下时间的功能比较有趣。它可以根据我们指定的日期返回太阳的升起和落下时间。$sun_info=date_sun_info(strtotime("2020-12-12"),113.037211,28.203167);foreach($sun_infoas$key=>$val){echo"$key:".date("H:i:s",$val)."\n";}//日出:08:03:54//日落:05:58:14//中转:19:01:04//civil_twilight_begin:09:58:56//civil_twilight_end:04:03:11//nautical_twilight_begin:11:20:07//nautical_twilight_end:02:42:01//astronomical_twilight_begin:12:27:37//astronomical_twilight_end:01:34:31sunrise是日出,sunset是日落,另外还有twilight,这是黄昏和黄昏的时间。不管准确度如何,这个函数和sun相关的都是比较有意思的函数。获取日期和时间的详细信息。上面提到的date_parse()函数是将标准的日期格式转换成详细的日期信息数组。在这里,还有其他实现类似功能且内容更丰富的函数。var_dump(getdate());//array(11){//["seconds"]=>//int(15)//["minutes"]=>//int(52)//["hours"]=>//int(9)//["mday"]=>//int(9)//["wday"]=>//int(5)//["mon"]=>//int(10)//["year"]=>//int(2020)//["yday"]=>//int(282)//["weekday"]=>//string(6)"Friday"//["month"]=>//string(7)"October"//[0]=>//int(1602204735)//}var_dump(gettimeofday());//array(4){//["sec"]=>//int(1602205147)//["usec"]=>//int(625261)//["minuteswest"]=>//int(-540)//["dsttime"]=>//int(0)//}var_dump(gettimeofday(true));//float(1602205147.6253)getdate()函数只会返回日期和时间的详细信息,不会有错误信息之类的,不仅包括年月时分等相关信息,还包括当前时间的时间戳信息,可以说是一个真实完整的日期明细功能。它可以有一个参数来返回指定日期的内容。如果不给出该参数,则返回当前日期和时间下的信息。gettimeofday()从名字就可以看出,它返回的是当前日期的时间戳信息,如果它的参数设置为true,那么和time()返回的内容基本类似,但是需要注意的是,它返回的内容包含微秒。我们后面会看到的microtime()是一个专门用来返回时间戳的函数,时间戳是微秒级的。它还可以将参数设置为true以这种数字格式返回时间戳,但大多数人可能不知道。.获取本地时间详细信息$localtime=localtime();$localtime_assoc=localtime(time(),true);print_r($本地时间);//数组//(//[0]=>14//[1]=>3//[2]=>10//[3]=>9//[4]=>9//[5]=>120//[6]=>5//[7]=>282//[8]=>0//)print_r($localtime_assoc);//数组//(//[tm_sec]=>14//[tm_min]=>3//[tm_hour]=>10//[tm_mday]=>9//[tm_mon]=>9//[tm_year]=>120//[tm_wday]=>5//[tm_yday]=>282//[tm_isdst]=>0//)localtime()函数返回当地时间的数组信息,与C函数调用返回的完全一致。如果第二个参数设置为true,则返回的数组键为英文键名形式的内容。可以看出,也是返回的时间信息,还包括年月日时分秒。此外,wday是星期几,yday是一年中的第几天。其他时间函数var_dump(microtime());//字符串(21)"0.384888001602205473"var_dump(microtime(true));//float(1602205473.3849)这就是上面提到的microtime()函数,在没有参数的情况下,接下来它返回的内容是一个时间戳,格式为microsecondspaceseconds。添加参数后,它返回秒的格式。微秒。可以明显看出,默认情况下,它的微秒级精度更高。当然,具体的需求还是需要根据我们的业务情况来决定使用哪种格式。其实如果你想拼接自己的时间戳格式,上面提到的gettimeofday()可能更方便,毕竟sec和usec这两个字段在它返回的数组中已经为我们准备好了。这绝对是今天这篇文章最大的惊喜,可以应用到一些我们需要以微秒为单位的真实业务场景。var_dump(gmdate("Y-m-dH:i:s"));//字符串(19)"2020-10-0901:00:20"var_dump(idate('Y'));//int(2020)var_dump(mktime(14,22,22,10,22,2020));//int(1603344142)var_dump(gmmktime(14,22,22,10,22,2020));//int(1603376542)var_dump(strftime("%C%Y%m%d%R%U"));//string(22)"202020100910:1240"var_dump(gmstrftime("%C%Y%m%d%R%U"));//string(22)"202020100901:1340"var_dump(strptime("2020-10-0912:12:12",'%Y-%m-%d%H:%M:%S'));//数组(9){//["tm_sec"]=>//int(12)//["tm_min"]=>//int(12)//["tm_hour"]=>//int(12)//["tm_mday"]=>//int(9)//["tm_mon"]=>//int(9)//["tm_year"]=>//int(120)//["tm_wday"]=>//int(5)//["tm_yday"]=>//int(282)//["unparsed"]=>//string(0)""//}gmdate()获取的是公历时间,也就是我们当前时区减去8小时的时区。idate()函数用于获取指定的时间信息,比如我们在测试代码中只获取当前年份。mktime()获取指定时间的时间戳,同理,gmmktime()获取指定时间的公历时间戳。strftime()和gmstrftime()获取格式化的本地时间和日期。以gm开头的也是公历时间,后面是需要的格式。这个类似于DateTime的format()方法,里面的参数也是类似的。%C代表世纪,对应的世纪需要加1。比如代码返回20,但实际上我们现在是21世纪。%R返回格式H:i,%U返回周数。strptime()根据指定格式的日期返回日期详情数组,类似于localtime()。综上所述,是不是觉得自己发现了很多宝藏呢?在今天的学习中,我们发现gettimeofday()函数也可以返回微秒时间,而且还是格式化为数组。我们还发现计算指定日期的日出和日落时间很有趣。功能。当然,学习只是一方面。首先你要记住PHP已经提供了这些功能,然后在实际的业务场景中应用。只有这样才能说你真正熟练掌握了这些内容,其他的也不多说了,赶快用起来吧。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/1。PHP中日期相关函数(3).php参考文档:https://www.php.net/manual/zh/ref.datetime.php各媒体平台均可搜索【硬核项目经理】
