1.日期函数

日期函数用于获得当前系统的日期和时间。

PHP 常用日期函数:

函数名 说明
date_default_timezone_set() 设置日期函数的默认时区
date_default_timezone_get() 获得日期函数的默认时区
time() 获得当前UNIX时间戳
date() 将时间戳转换成日期和时间
getdate() 获取日期信息

1、设置时区
在IT互联网行业中,我们通常默认使用的是世界标准时间UTC。中国使用的是北京时间,由于北京地处东八区,领先UTC时间8个小时,因此,我们在PHP中获得日期时间时,必须要正确设置时区。
设置时区语法格式:
date_default_timezone_set(“PRC”);
2、获取时间戳
UNIX 时间戳是从 1970 年 1 月 1 日开始所经过的秒数。
获取时间戳语法格式:
int time()
第一章第四节 - 图1示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. date_default_timezone_set("PRC");
  4. $t1=time();
  5. echo$t1;

3、格式化日期
格式化日期用于将时间戳转换成日期和时间。

格式化日期语法格式:
string date(日期格式 , 时间戳)

常用日期格式字符:

格式字符 说明 返回值
Y 4位数表示的年份 例如:1999或2020
y 2位数表示的年份 例如:99或20
m 数字表示的月份,有前导零 例如:01或12
M 三个字母缩写表示的月份 例如:Jan或Dec
d 月份中的第几天,有前导零 例如:01或31
j 月份中的第几天,没有前导零 例如:1或31
w 星期中的第几天 例如:0(表示星期天)或6(表示星期六)
H 小时,24小时格式,有前导零 例如:00中23
h 小时,12小时格式,有前导零 例如:01或12
G 小时,24小时格式,没有前导零 例如:0或23
g 小时,12小时格式,没有前导零 例如:1或12
i 分钟,有前导零 例如:00或59
s 秒数,有前导零 例如:00或59

第一章第四节 - 图2示例

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. date_default_timezone_set("PRC");
  4. $d=date("Y-m-d H:i:s",time());
  5. echo$d;

2.cookie

Cookie 是一种在客户端存储数据并用这些数据来跟踪和识别用户的机制。Cookie 在 Web 服务器端产生,并以文本文件的形式存储在了客户端电脑的硬盘上。
客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器检查该Cookie,以此来辨认用户状态。
Cookie 通常用于以下 3 个方面:
1)记录用户信息,如上次登陆的用户名等。
2)页面之间传递参数。
3)将HTML页面存储在 Cookie 中,提高页面浏览速度。
4)实现记录用户个人信息的功能
注意:
Cookie是不可以跨域名的,隐私安全机制禁止网站非法获取其他网站的Cookie。
比如: 淘宝的 cookie 信息, 京东是不能使用的,也不允许获取.
1、创建Cookie
在 PHP 中,setcookie() 函数可以用来创建 Cookie,但是如果客户端浏览器禁用了 Cookie,则 setcookie() 函数会返回 false。
常见创建 Cookie 的语法格式,有以下两种:
创建 Cookie 语法格式:
bool setcookie(名称 , 值)
注意:Cookie 会在会话结束(浏览器整体关闭)时失效。
创建 Cookie 语法格式:
bool setcookie(名称 , 值 , 有效期)
注意:Cookie 会在有效期过后失效。
2、读取 Cookie
PHP 提供了全局变量 $_COOKIE 来读取 Cookie 的值。
读取Cookie语法格式:
$变量 = $_COOKIE[“名称”]
第一章第四节 - 图3
示例*

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. setcookie("userName","张小明",time()+3600);
  4. if(isset($_COOKIE["userName"])){
  5. $name=$_COOKIE["userName"];
  6. echo$name;
  7. }
  8. else{
  9. echo"Cookie还未创建";
  10. }

3.设置Cookie信息 setcookie()

setcookie(string $name, string $value = "", array $options = []): bool

setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。 和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。 请在产生任何输出之前(包括 和 或者空格)调用本函数。

一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。 Cookie 值同样也存在于 $_REQUEST。

常见创建 Cookie 的语法格式,有以下两种:

创建 Cookie 语法格式一:

bool setcookie(名称 , 值)

注意:Cookie 会在会话结束(浏览器整体关闭)时失效。
3、删除 Cookie
没有设置有效期的 Cookie,在浏览器整体关闭时,就会自动删除。设置了有效期的 Cookie,在过了有效期之后,也会自动删除。
如果我们想提前删除 Cookie 中的值,可以通过 setcookie() 函数,重新将指定的 Cookie 值设置为空值。
第一章第四节 - 图4示例

<?php
header("content-type:text/html;charset=utf-8");
setcookie("userName","张小明",time()+3600);
setcookie("userName","");
if(isset($_COOKIE["userName"])){
$name=$_COOKIE["userName"];
echo$name;
}
else{
echo"Cookie还未创建";
}

3.补充

time()

time(): int

返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。

echo time();
  1. getdate()
getdate(int $timestamp = time()): array

返回一个根据 timestamp 得出的包含有日期信息的关联数组 array。

如果没有给出时间戳则认为是当前本地时间。

可选的 timestamp 参数是一个 int 的 Unix 时间戳,如未指定或是 **null**,参数值默认为当前本地时间。也就是说,其值默认为 time() 的返回值。

返回一个根据 timestamp 得出的包含有日期信息的关联数组 array。 返回的关联数组中的键名单元有以下几个:

键名 说明 返回值例子
"seconds" 秒的数字表示 0
59
"minutes" 分钟的数字表示 0
59
"hours" 小时的数字表示 0
23
"mday" 月份中第几天的数字表示 1
31
"wday" 星期中第几天的数字表示 0
(周日) 到 6
(周六)
"mon" 月份的数字表示 1
12
"year" 4 位数字表示的完整年份 比如: 1999
2003
"yday" 一年中第几天的数字表示 0
365
"weekday" 星期几的完整文本表示 Sunday
Saturday
"month" 月份的完整文本表示,比如 January 或 March January
December
0 自从 Unix 纪元开始至今的秒数,和 time()
的返回值以及用于 date()
的值类似。
系统相关,典型值为从 -2147483648
2147483647
$cd = getdate();
foreach ($cd as $key => $value) {
  echo $key . "-->" . $value . "<br>";
}
  1. date()
date(string $format, int $timestamp = ?): string

格式化一个本地时间/日期

返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。

常用日期格式字符:

格式字符 说明 返回值
Y 4位数表示的年份 例如:1999或2020
y 2位数表示的年份 例如:99或20
m 数字表示的月份,有前导零 例如:01或12
M 三个字母缩写表示的月份 例如:Jan或Dec
d 月份中的第几天,有前导零 例如:01或31
j 月份中的第几天,没有前导零 例如:1或31
w 星期中的第几天 例如:0(表示星期天)或6(表示星期六)
H 小时,24小时格式,有前导零 例如:00中23
h 小时,12小时格式,有前导零 例如:01或12
G 小时,24小时格式,没有前导零 例如:0或23
g 小时,12小时格式,没有前导零 例如:1或12
i 分钟,有前导零 例如:00或59
s 秒数,有前导零 例如:00或59
    // 年-月-日  
    echo date("y-m-d");
    echo "<br>";
    echo date("Y-m-d");
    echo "<br>";
    // 年/月/日  
    echo date("Y/m/d");
    echo "<br>";
    // xx年xx月xx日  
    echo date("Y年m月d日");
    echo "<br>";
    // 时:分:秒
    echo date("h:i:s");
    echo "<br>";
    echo date("H:i:s");
    echo "<br>";
    // 年月日 时分秒
    echo date("Y/m/d H:i:s");
    echo "<br>";
    // L 是否为闰年 ,如果是闰年为 1,否则为 0
    echo date("Y-m-d -> L");
  1. date_default_timezone_get()
date_default_timezone_get(): string

取得一个脚本中所有日期时间函数所使用的默认时区

  1. date_default_timezone_set()
date_default_timezone_set(string $timezone_identifier): bool

设定用于一个脚本中所有日期时间函数的默认时区

 echo date_default_timezone_get();
 // 格林尼治时间
 date_default_timezone_set("UTC");
 echo "<br>";
 echo date_default_timezone_get();
 // 亚洲/上海时区
 date_default_timezone_set("Asia/Shanghai");
 echo "<br>";
 echo date_default_timezone_get();
 echo "<br>";
 // PRC  the People's Republic of China 中华人民共和国 (可认为是北京时间)
 date_default_timezone_set("PRC");
 echo "<br>";
 echo date_default_timezone_get();
  1. strtotime()
strtotime(string $datetime, int $now = time()): int

将任何字符串的日期时间描述解析为 Unix 时间戳

echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";

// 今天的时间 
echo date("Y-m-d  H:i:s");
echo "<br>";
$t = "+1 day";
$time = strtotime($t);
// 明天的这个时间 
echo date("Y-m-d  H:i:s", $time);