欢迎访问宙启技术站
智能推送

PHP日期时间函数:掌握PHP日期的使用规范和实践方法。

发布时间:2023-06-15 14:59:23

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>&nbsp;</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){