PHP 简明教程

PHP 日期与时间

1. PHP 日期和时间函数

PHP 提供了多种内置的日期和时间函数,用于处理服务器端的日期和时间。

核心的日期和时间函数包括:

  • date() - 格式化本地日期和/或时间
  • mktime() - 返回日期的 Unix 时间戳
  • strtotime() - 将英文文本日期时间字符串转换为 Unix 时间戳
  • time() - 以 Unix 时间戳形式返回当前时间
  • date_default_timezone_set() - 设置后续使用的默认时区
  • date_default_timezone_get() - 获取当前脚本使用的默认时区

2. PHP date() 函数

date() 函数用于将本地日期和/或时间格式化为更具可读性的形式。

2.1 语法

date(format, timestamp)
参数描述
format必填。规定时间戳的格式。
timestamp可选。规定 Unix 时间戳。默认是当前的本地日期和时间。

2.2 使用 date() 函数格式化日期

date() 函数中的 format 参数定义了日期的显示方式。以下是一些常用于日期的字符:

  • d - 代表月份中的天数(01 到 31)
  • j - 代表月份中的天数,不带前导零(1 到 31)
  • m - 代表月份(01 到 12)
  • Y - 代表年份(四位数)
  • l (小写的 'L') - 代表星期几
  • F - 代表月份的完整英文名称

其他字符如 "/"、"." 或 "-" 也可以插入到字符之间,以添加额外的格式。

代码示例:

<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");
?>

3. PHP 小技巧 - 自动更新版权年份

可以使用 date() 函数在网站上自动更新版权年份:

代码示例:

© 2010-<?php echo date("Y");?>

4. 显示时间

date() 函数同样用于将本地时间格式化为可读形式。以下是一些常用于时间的字符:

  • H - 24 小时制的小时(00 到 23)
  • h - 12 小时制的小时,带前导零(01 到 12)
  • i - 分数,带前导零(00 到 59)
  • s - 秒数,带前导零(00 到 59)
  • a - 小写的上午或下午(am 或 pm)

代码示例:

<?php
echo "现在时间是 " . date("H:i:s") . "<br>";
echo "现在时间是 " . date("h:i:s a");
?>

5. PHP date_default_timezone_set() 函数

请注意,date() 函数返回的是服务器当前的本地日期/时间!

如果需要根据特定位置获取准确的时间,需要使用 date_default_timezone_set() 函数设置要使用的时区。

下例将时区设置为 "America/New_York",然后以指定格式输出当前日期和时间:

代码示例:

<?php
date_default_timezone_set("America/New_York");
echo "纽约当前时间是 " . date("Y-m-d H:i:s");
?>

6. PHP date_default_timezone_get() 函数

若要返回脚本中所有日期/时间函数所使用的默认时区,请使用 date_default_timezone_get() 函数:

代码示例:

<?php
echo date_default_timezone_get();
?>

7. PHP mktime() 函数

date() 函数中的可选 timestamp 参数可以指定一个时间戳。如果省略,则使用当前日期和时间(如上述示例所示)。

mktime() 函数返回日期的 Unix 时间戳。Unix 时间戳是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)至指定时间之间的秒数。

7.1 语法

mktime(hour, minute, second, month, day, year)

代码示例:
下例返回特定日期的 Unix 时间戳,并使用 date() 函数查找该日期是星期几:

<?php
date_default_timezone_set("UTC");
$d = mktime(0, 0, 0, 10, 3, 1975);
echo "1975年10月3日是 " . date("l", $d);
?>

8. PHP time() 函数

time() 函数以 Unix 时间戳的形式返回当前时间。

8.1 语法

time()

代码示例:

<?php
echo "当前时间戳: " . time();
?>

下例展示了如何将获取的当前时间戳格式化为可读的日期时间:

<?php
$ts = time();
echo date('Y-m-d H:i:s', $ts);
?>

9. PHP strtotime() 函数

strtotime() 函数将英文文本形式的日期时间字符串转换为 Unix 时间戳。

9.1 语法

strtotime(datetime_string, basetimestamp)

strtotime() 在将字符串转换为日期方面非常智能,您可以输入各种描述性值:

代码示例:

<?php
$d = strtotime("10:30pm November 15 2025");
echo "日期是 " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("now");
echo "当前日期 " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("+5 days");
echo "5天后是 " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("+2 weeks 4 days 2 hours 20 seconds");
echo "指定偏移后是 " . date("Y-m-d H:i:s", $d) . "<br>";

$d = strtotime("last Sunday");
echo "上个星期日是 " . date("Y-m-d H:i:s", $d);
?>

提示:strtotime() 并非完美,请务必检查您输入的字符串格式。

10. 更多日期示例

以下示例输出接下来六个星期六的日期:

代码示例:

<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks", $startdate);

while ($startdate < $enddate) {
  echo date("M d", $startdate) . "<br>";
  $startdate = strtotime("+1 week", $startdate);
}
?>