PHP Date/Time 函数

PHP Date/Time 函数允许您获取和格式化服务器上的日期和时间,支持多种时区和格式。

PHP Date/Time 简介

Date/Time 函数允许您从 PHP 脚本运行的服务器上获取日期和时间。您可以使用 Date/Time 函数通过不同的方式来格式化日期和时间。

注意:这些函数依赖于服务器的本地设置。使用这些函数时请记住要考虑夏令时和闰年。

安装说明

PHP Date/Time 函数是PHP 核心的组成部分。无需安装即可使用这些函数。

运行时配置

Date/Time 函数的行为受到 php.ini 中设置的影响:

名称 描述 默认 PHP 版本
date.timezone 规定默认时区(所有的 Date/Time 函数使用该选项) "" PHP 5.1+
date.default_latitude 规定默认纬度(date_sunrise() 和 date_sunset() 使用该选项) "31.7667" PHP 5.0+
date.default_longitude 规定默认经度(date_sunrise() 和 date_sunset() 使用该选项) "35.2333" PHP 5.0+
date.sunrise_zenith 规定默认日出天顶(date_sunrise() 和 date_sunset() 使用该选项) "90.83" PHP 5.0+
date.sunset_zenith 规定默认日落天顶(date_sunrise() 和 date_sunset() 使用该选项) "90.83" PHP 5.0+

PHP Date/Time 函数列表

函数 描述 版本
checkdate() 验证格利高里日期。 PHP 4+
date_add() 添加日、月、年、时、分和秒到一个日期。 PHP 5.3+
date_create_from_format() 返回一个根据指定格式进行格式化的新的 DateTime 对象。 PHP 5.3+
date_create() 返回一个新的 DateTime 对象。 PHP 5.2+
date_date_set() 设置一个新的日期。 PHP 5.2+
date_default_timezone_get() 返回默认时区,被所有的 Date/Time 函数使用。 PHP 5.1+
date_default_timezone_set() 设置默认时区,被所有的 Date/Time 函数使用。 PHP 5.1+
date_diff() 返回两个日期间的差值。 PHP 5.3+
date_format() 返回根据指定格式进行格式化的日期。 PHP 5.2+
date_get_last_errors() 返回日期字符串中的警告/错误。 PHP 5.3+
date_interval_create_from_date_string() 从字符串的相关部分建立一个 DateInterval。 PHP 5.3+
date_interval_format() 格式化时间间隔。 PHP 5.3+
date_isodate_set() 设置 ISO 日期。 PHP 5.2+
date_modify() 修改时间戳。 PHP 5.2+
date_offset_get() 返回时区偏移。 PHP 5.2+
date_parse_from_format() 根据指定的格式返回一个带有指定日期的详细信息的关联数组。 PHP 5.3+
date_parse() 返回一个带有指定日期的详细信息的关联数组。 PHP 5.2+
date_sub() 从指定日期减去日、月、年、时、分和秒。 PHP 5.3+
date_sun_info() 返回一个包含有关指定日期与地点的日出/日落和黄昏开始/黄昏结束的信息的数组。 PHP 5.1+
date_sunrise() 返回指定日期与地点的日出时间。 PHP 4+
date_sunset() 返回指定日期与地点的日落时间。 PHP 4+
date_time_set() 设置时间。 PHP 5.2+
date_timestamp_get() 返回 Unix 时间戳。 PHP 5.3+
date_timestamp_set() 设置基于 Unix 时间戳的日期和时间。 PHP 5.3+
date_timezone_get() 返回给定 DateTime 对象的时区。 PHP 5.2+
date_timezone_set() 设置 DateTime 对象的时区。 PHP 5.2+
date() 格式化本地日期和时间。 PHP 4+
getdate() 返回某个时间戳或者当前本地的日期/时间的日期/时间信息。 PHP 4+
gettimeofday() 返回当前时间。 PHP 4+
gmdate() 格式化 GMT/UTC 日期和时间。 PHP 4+
gmmktime() 返回 GMT 日期的 UNIX 时间戳。 PHP 4+
gmstrftime() 根据区域设置格式化 GMT/UTC 日期和时间。 PHP 4+
idate() 格式化本地时间/日期为整数。 PHP 5+
localtime() 返回本地时间。 PHP 4+
microtime() 返回当前 Unix 时间戳的微秒数。 PHP 4+
mktime() 返回一个日期的 Unix 时间戳。 PHP 4+
strftime() 根据区域设置格式化本地时间/日期。 PHP 4+
strptime() 解析由 strftime() 生成的时间/日期。 PHP 5.1+
strtotime() 将任何英文文本的日期或时间描述解析为 Unix 时间戳。 PHP 4+
time() 返回当前时间的 Unix 时间戳。 PHP 4+
timezone_abbreviations_list() 返回包含夏令时、偏移量和时区名称的关联数组。 PHP 5.2+
timezone_identifiers_list() 返回带有所有时区标识符的数值数组。 PHP 5.2+
timezone_location_get() 返回指定时区的位置信息。 PHP 5.3+
timezone_name_from_abbr() 根据时区缩略语返回时区名称。 PHP 5.3+
timezone_name_get() 返回时区的名称。 PHP 5.2+
timezone_offset_get() 返回相对于 GMT 的时区偏移。 PHP 5.2+
timezone_open() 创建一个新的 DateTimeZone 对象。 PHP 5.2+
timezone_transitions_get() 返回时区的所有转换。 PHP 5.2+
timezone_version_get() 返回时区数据库的版本。 PHP 5.3+
date_create_immutable() 创建一个新的不可变的 DateTime 对象。 PHP 7.1+
date_create_immutable_from_format() 根据指定格式创建不可变的 DateTime 对象。 PHP 7.1+

PHP 预定义的 Date/Time 常量

常量 描述
DATE_ATOM Atom 格式 (例如:2005-08-15T16:13:03+0000)
DATE_COOKIE HTTP Cookies 格式 (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_ISO8601 ISO-8601 格式 (例如:2005-08-14T16:13:03+0000)
DATE_RFC822 RFC 822 格式 (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_RFC850 RFC 850 格式 (例如:Sunday, 14-Aug-05 16:13:03 UTC)
DATE_RFC1036 RFC 1036 格式 (例如:Sunday, 14-Aug-05 16:13:03 UTC)
DATE_RFC1123 RFC 1123 格式 (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_RFC2822 RFC 2822 格式 (例如:Sun, 14 Aug 2005 16:13:03 +0000)
DATE_RFC3339 RFC 3339 格式 (例如:2005-08-14T16:13:03+00:00)
DATE_RFC3339_EXTENDED RFC 3339 扩展格式 (例如:2005-08-14T16:13:03.123+00:00)
DATE_RSS RSS 格式 (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_W3C 万维网联盟格式 (例如:2005-08-14T16:13:03+0000)

使用示例

基本日期时间操作
// 设置时区
date_default_timezone_set('Asia/Shanghai');

// 获取当前日期时间
echo date('Y-m-d H:i:s'); // 输出: 2024-01-15 10:30:45

// 格式化时间戳
$timestamp = time();
echo date('l, F jS, Y', $timestamp); // 输出: Monday, January 15th, 2024

// 解析英文日期文本
echo strtotime('next Monday'); // 返回时间戳
echo date('Y-m-d', strtotime('+1 week')); // 一周后的日期
DateTime 对象操作
// 创建 DateTime 对象
$date = date_create('2024-01-15');
echo date_format($date, 'Y年m月d日'); // 输出: 2024年01月15日

// 添加时间间隔
$date = date_create('2024-01-15');
date_add($date, date_interval_create_from_date_string('10 days'));
echo date_format($date, 'Y-m-d'); // 输出: 2024-01-25

// 计算日期差
$date1 = date_create('2024-01-01');
$date2 = date_create('2024-12-31');
$interval = date_diff($date1, $date2);
echo $interval->format('%a 天'); // 输出两个日期之间的天数
时区操作
// 获取所有时区
$timezones = timezone_identifiers_list();
print_r($timezones);

// 转换时区
$date = date_create('2024-01-15 10:00:00', timezone_open('UTC'));
date_timezone_set($date, timezone_open('Asia/Shanghai'));
echo date_format($date, 'Y-m-d H:i:s'); // 输出: 2024-01-15 18:00:00

// 获取时区信息
$tz = timezone_open('America/New_York');
echo timezone_name_get($tz); // 输出: America/New_York
print_r(timezone_location_get($tz));
最佳实践
  • 始终在脚本开始时设置默认时区(date_default_timezone_set())
  • 使用 DateTime 对象进行复杂的日期时间操作
  • 对于国际化应用,考虑使用 strftime() 进行本地化格式化
  • strtotime() 可以解析复杂的英文日期字符串
  • 验证日期输入的有效性(使用 checkdate())
  • 注意时区转换和夏令时的影响