上一篇: String过滤-trim函数
下一篇: 数组-什么是数组
在编程的时候,总会有一些不统一的地方无法满足编程环境的严格限制。例如,处理日期和时间的时候,推算起来会比较复杂,除了时间进制位外,还涉及到不同月份的天数可能不同,所以使用简单的运算是无法解决的。PHP提供了UNIX时间戳,用于解决时间的运算问题。
UNIX时间戳(UNIX timestamp)是一种时间的表达方式,以32位二进制数来表示。UNIX时间不仅被使用在UNIX系统中,在许多的操作系统也被广泛使用,由于时间戳不能为负数,因此1970年以前的时间戳无法使用。
将日期和时间转化为时间戳使得php中的日期和时间计算变得简单,php提供了mktime()函数用于返回一个指定时间的时间戳,其声明格式如下
int mktime([int $hour[,int $minute[,int $second[,int $month[,int $day[,int $year [,int $is_dst]]]]]]])
该函数返回一个UNIX时间戳,参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。需要注意的是参数$is_dst,它用于指定是否为夏时制时间,1表示是,0表示不是,默认为-1,表示不知道是否是夏时制。这种情况下,php会自己尝试搞明白。可能会产生不可预知(但并非不正确)的结果。所以php5.1起版本参数已经废弃。
案例:演示mktime()函数用法
<?php
echo date("Y-m-d H:i:s",mktime())."<br>"; //忽略所有参数,则使用当前时间
echo date("Y-m-d H:i:s",mktime(15))."<br>";//指定小时,其他值使用当前时间
echo date("Y-m-d H:i:s",mktime(15,28))."<br>"; //指定小时和分,其他时间使用当前时间
echo date("Y-m-d H:i:s",mktime(16,30,56))."<br>";//指定时分秒,其他值使用当前时间
echo date("Y-m-d H:i:s",mktime(18,30,55,3))."<br>"; //指定时分秒和月份,其他值使用当前时间
echo date("Y-m-d H:i:s",mktime(8,32,35,2,16))."<br>";//指定时分秒,日期和月份,其他值使用当前时间
echo date("Y-m-d H:i:s",mktime(10,31,52,11,30,2020))."<br>"; //指定时分秒,月日年
echo "<hr>";
echo "2021年4月20日14时15分46秒的时间戳为:".mktime(14,15,46,4,20,2021);
?>
运行结果
需要注意的是,由于时间戳是一个整数,如,1618899346(2021-4-20 14:15:46)根本看不懂它所表示的时间,所以在案例中使用了date()函数用于格式化输出。
在实际开发中,经常需要获取时间,如系统时间、获取用户提交时间、获取程序执行时间等。
1. 获取系统时间获取当前时间最简单的方法是使用time()函数,其声明格式如下:
time()函数没有参数,返回值为int类型。
php默认时区设置UTC(Universal Time Coordinated,全球标准时间)时间,与英国伦敦本地时间相同,而北京正好是东八区,所以使用time获取当前时间会出现8小时的时差。
要正确显示北京时间,通常有两种修改方式:
(1) 修改php配置文件,需要有服务器支配权限,修改php.ini文件中的data.timezone配置。例如,将默认的时区设置为PRC(中华人民共和国 );修改完成后重启服务器。
(2) 在程序中使用函数设置,可以在程序中使用date_default_timezone_set()函数来设置时区,改函数声明如下
bool date_default_timezone_set(string $timezone_identifier)
返回值类型为bool类型,timezone_identifier用于指定时区标识符,可以是“PRC”“Asia/shanghai”等,例如将默认时区设置为上海
<?php
date_default_timezone_set("Asia/shanghai");
echo date("Y-m-d H:i:s",time());
bool date_default_timezone_set(string $timezone_identifier)
?>
2.获取用户提交的时间
在实际开发中,除了要求获取系统时间,也需要获取用户提交表单的时间,表单中的时间通常使用日期选择控件获得的字符串。如“2022-2-22 14:30:25”在php中提供了一个strtotime()函数,用于将字符串转化为时间戳。该函数声明格式如下
int strtotime(string $time[,int $now])
参数$time用于指定日期时间字符创,$now用于计算相对时间的参考点,如果省略则使用系统当前时间。
案例
<?php
echo "2022-2-22 14:30:25时间戳为:".strtotime("2022-2-22 14:30:25")."<br>";//字符串转成时间戳,
echo date("Y-m-d H:i:s",strtotime("2022-2-22 14:30:25"))."<br>";//将字符串转成时间戳然后格式化输出
//输出明天的这个时间点点
echo date("Y-m-d H:i:s",strtotime("+1 day"))."<br>";
//输出3个月之前的时间点
echo date("Y-m-d H:i:s",strtotime("-3 month"))."<br>";
//输出下个星期一的日期时间
echo date("Y-m-d H:i:s",strtotime("next monday"));
?>
运行结果
3. 获取精确时间UNIX时间戳是以秒作为最小计量单位,使用time()函数能处理php开发中的大部分应用,但对于某些程序来说不够精确。如计算脚本的执行时间。
Php提供了一个函数mincrtime()函数用于处理更精确的时间,其声明格式如下
mixed microtime([bool $get_as_flaota])
该函数返回UNIX时间戳以及微秒,参数$get_as_float是可选参数,如果设置为true将返回一个浮点数,如果省略,则以msec sec格式返回一个字符串,其中msec是微秒部分,sec是秒数,但是都是以秒为单位返回。
案例
<?php
header("Content-Type:text/html;charset=utf-8");
//定义一个函数获取脚本运行时间
function microtime_float(){
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec+(float)$sec);
}
$time_start=microtime_float();
usleep(1000);
$time_end=microtime_float();
$time=$time_end-$time_start;
echo "脚本执行花费了".$time."秒";
?>
运行结果
定义一个获取精准时间的函数,在脚本开始的时候调用该函数获取开始执行时间,在脚本结束的时候,调用该函数获取脚本运行结束时间,二者相减,计算出脚本运行的时间。
使用UNIX时间戳保存和计算时间很方便,但是时间戳的可读性很差,乍一看就是一个毫无意义的整形数值,所以需要对时间戳进行格式化处理,然后在输出。其声明格式如下
string date(string $format[, int $timestamp])
返回值类型是string类型。$timestamp为可选参数,如果没有指定则是当前时间。$format为固定参数,表示给定的格式。在格式化时间时,有许多代表特殊意义的$format字符。常见的格式如下
format字符 | 说明 | 示例 |
d | 月份中的第几天,有前导零的2位数 | 01到31 |
D | 星期中的第几天,文本表示,3个字母 | Mon到Sun |
j | 月份中的第几天,没有前导0 | 1到31 |
l | 星期几,完整的文本格式 | Sunday到Saturday |
N | ISO-8601格式数字便是星期中的第几天 | 1(星期一)到7(星期天) |
S | 每月数天后面的英文后缀,2个字符 | st,nd,rd或者th |
w | 星期中的第几天,数字表示 | 0(星期天)到6(星期六) |
z | 年份中的第几天 | 0到365 |
W | ISO-8601格式年份中的第几周(每周从周一开始) | 如,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格式年份数字 | 如,199or2009 |
Y | 4位数字完整表示的年份 | 如,1997或2010 |
y | 2位数字表示的年份 | 如,98或08 |
a | 小写的上午和下午值 | am或pm |
A | 大写的上午和下午值 | AM或PM |
B | Swatch Internet标准时 | 000到999 |
g | 小时,12小时格式,没有前导零 | 1到12 |
G | 小时,24小时格式,没有前导零 | 1到24 |
h | 小时,12小时格式,有前导零 | 01到12 |
H | 小时,24小时格式,有前导零 | 00到23 |
i | 有前导零的分钟数 | 00到59 |
s | 秒数,有前导零 | 00到59 |
案例
<?php
echo date("Y年m月d日H时i分s秒",time())."<br>";
echo "今天是".date("l",time())."<br>";
echo date('l ds \of F Y H:i:s A');
?>
运行结果
date()函数将当前时间格式化输出。需要注意的是,在格式化非format字符前需要加上反斜杆来转义,否则它会按照format字符进行解释
上一篇: String过滤-trim函数
下一篇: 数组-什么是数组
*声明:内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。