PHP日期时间函数:掌握PHP日期的使用规范和实践方法。
PHP是一种用于Web开发的脚本语言,可以帮助开发者快速构建动态网站和应用程序。在Web开发中,日期和时间非常重要,因为它们涉及到用户注册、活动时间表、订单历史等等。因此,了解如何使用PHP日期时间函数是非常重要的,以下是该主题的一些指南。
一、PHP日期和时间函数
PHP已经提供了许多日期和时间函数,一些常见的函数包括:date()、time()、strtotime()、mktime()等等。下面我们详细了解下这些函数的使用方法。
1、date()函数
date()函数可用于格式化日期和时间,格式为date(format,timestamp)。其中,format参数是必须的,确定了输出的日期和时间格式;timestamp参数是可选的,可以是当前时间戳或者特定时间的时间戳,一般用time()函数获得当前时间的时间戳。我们使用一些常用的date()函数格式如下:
日期格式:
Y - 年(4 位数)
m - 月(2 位数)
d - 日(2 位数)
l - 星期几(完整文字形式)
D - 星期几(缩写)
M - 月份(缩写)
时间格式:
h - 小时(12 小时制,数字前无零)
H - 小时(24 小时制,数字前无零)
i - 分钟(数字前有零)
s - 秒(数字前有零)
a - 上午或下午(小写)
例如,以下代码输出的是2019年05月01日星期三:
<?php
echo date("Y年m月d日l");
?>
2、time()函数
time()函数用于获取当前时间的时间戳,也可用于获得某个特定时间的时间戳(以秒为单位)。例如,以下代码输出当前时间的时间戳:
<?php
echo time();
?>
3、strtotime()函数
strtotime()函数可用于将任何英文日期和时间文本转换为时间戳,例如strtotime("now")将返回当前时间戳。同时,该函数还支持用于计算的简单时间段,例如strtotime("+1 day")将返回当前日期加一天的时间戳。以下代码用strtotime()函数将一段时间文本转换为时间戳:
<?php
echo strtotime("2019-05-01");
?>
4、mktime()函数
mktime()函数可用于创建时间戳,参数为mktime(hour,minute,second,month,day,year)。例如,以下代码使用mktime()函数创建一个时间戳,对应的时间为2019年5月1日 12:00:00:
<?php
echo mktime(12,0,0,5,1,2019);
?>
二、自定义日期和时间格式
除了使用date()函数的预设格式,还可以根据需要自定义日期和时间格式。例如,以下代码使用自定义时间格式输出当前时间:
<?php
$hour=date("H")+2; //加2小时
$minute=date("i");
$second=date("s");
$day=date("d");
$month=date("m");
$year=date("Y");
echo $hour.":".$minute.":".$second." ".$day."/".$month."/".$year;
?>
三、PHP日期和时间的常见应用场景
1、时间戳实现活动计时器
在进行在线活动推广时,通常需要计算活动剩余时间并显示在网页中,这样可以增加用户参与活动的兴趣。可以使用time()函数获取到当前时间的时间戳,再用mktime()函数创建宣传活动的开始和结束时间的时间戳,最后对二者时间戳求差计算活动剩余时间。
例如,在一个在线购物活动页面中,以下代码实现了一个活动计时器:
<?php
$current_time=time(); //获取当前时间戳
$promotion_start_time=mktime(0,0,0,5,1,2019); //宣传活动的开始时间
$promotion_end_time=mktime(23,59,59,5,31,2019); //宣传活动的结束时间
$promotion_time_left=$promotion_end_time-$current_time; //计算差值,即活动时间剩余
?>
<p>距离宣传活动结束还有 <?php echo floor($promotion_time_left/86400); ?> 天 <?php echo floor(($promotion_time_left%86400)/3600); ?> 小时 <?php echo floor((($promotion_time_left%86400)%3600)/60); ?> 分钟 <?php echo (($promotion_time_left%86400)%3600)%60; ?> 秒</p>
2、使用日期函数修改时间
有时需要在网站或应用程序中预先安排一些事件,例如提醒用户某个特定日期到了,或者在推广特定产品时给予特定的折扣。在这些情况下,需要使用PHP日期和时间函数。
例如,以下代码根据当前月份指定特定折扣:
<?php
$special_offer=1; //默认折扣为1
$current_month=date("m"); //获取当前月份
if($current_month=="05"){
$special_offer=0.85; //5月份折扣为15%
}
if($current_month=="06"){
$special_offer=0.8; //6月份折扣为20%
}
?>
<p>特定折扣为 <?php echo $special_offer; ?></p>
3、时间戳实现日历和日期选择器
当需要为用户提供日历和日期选择器时,时间戳是非常有用的。只需定义一个月的第一天时间戳,再用date()函数的“l”选项输出总天数,即可构建一个简单的日历。
例如,以下代码输出当前月份的一个简单日历:
<?php
$first_day_of_month=mktime(0,0,0,date("n"),1,date("Y")); //本月的第一天
$days_in_month=date("t",$first_day_of_month); //本月总天数
$day_offset=date("w",$first_day_of_month); //周几
?>
<table border="1">
<tr>
<th>星期日</th>
<th>星期一</th>
<th>星期二</th>
<th>星期三</th>
<th>星期四</th>
<th>星期五</th>
<th>星期六</th>
</tr>
<?php
for($i=1-$day_offset;$i<=$days_in_month;$i++){ //循环输出日历
if($i<=0 || $i>$days_in_month){ //无效日期(属于上个月或下个月)
echo "<td> </td>";
}else{
$current_date=mktime(0,0,0,date("n"),$i,date("Y"));
echo "<td>".date("j",$current_date)."</td>";
}
if(($i-$day_offset)%7==0){ //如果一周结束(周六)
echo "</tr><tr>";
}
}
?>
</table>
四、防止PHP日期和时间函数被攻击
在实际开发中,我们需要注意一个很重要的问题:如果我们使用了来自未知来源的日期和时间数据,可能会导致 PHP 时间和日期函数的安全漏洞。例如,用户可以以“../../../../../etc/passwd”用作批量设置所有文件的名称,从而访问到系统文件。我们可以使用PHP的filter_var()函数来验证输入数据是否为预期格式,并仅允许相应的格式数据通过。
例如,以下代码使用filter_var()函数验证日期和时间数据:
<?php
$user_input_datetime="2019-05-01 12:30:45";
if(filter_var($user_input_datetime,FILTER_VALIDATE_REGEXP,array("options"=>array("regexp"=>"/^[0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9]{2}:[0-9]{2}:[0-9]{2}$/")))===false){
