0

0

PHP如何获取当前日期和时间_PHP获取当前日期时间的函数与格式化

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-09-15 19:39:01

|

1024人浏览过

|

来源于php中文网

原创

最直接的方法是使用date()函数获取当前日期时间,推荐使用DateTime类进行更复杂的操作。date()函数通过格式化字符如Y-m-d H:i:s输出可读时间,默认基于当前Unix时间戳;DateTime类则支持面向对象的链式调用、时区设置(DateTimeZone)、时间加减(modify/add/sub)及DateInterval精确间隔运算。为避免时区错误,应全局设置date_default_timezone_set('UTC')或指定时区,并在存储时用UTC时间戳,显示时转换为目标时区。常见格式化字符包括Y(四位年)、m(两位月)、d(两位日)、H(24小时)、i(分钟)、s(秒)等,可组合生成自定义格式。strtotime()可用于简单相对时间计算,但复杂逻辑建议用DateTime配合DateInterval以提升代码清晰度与准确性。

php如何获取当前日期和时间_php获取当前日期时间的函数与格式化

在PHP中获取当前日期和时间,最直接也是最常用的方法就是利用内置的

date()
函数,它能根据你提供的格式字符串,将当前的Unix时间戳(或者你指定的其他时间戳)转换成可读性强的日期时间格式。当然,对于更复杂的日期时间操作和面向对象的编程风格,
DateTime
类则是更现代、功能更强大的选择。

解决方案

PHP提供了一系列函数和类来处理日期和时间,其中最核心的莫过于

date()
函数和
DateTime
类。

1. 使用

date()
函数

date()
函数是PHP中获取和格式化日期时间的基础。它接受两个参数:一个必选的格式字符串,以及一个可选的Unix时间戳。如果不提供时间戳,它默认使用当前时间。

立即学习PHP免费学习笔记(深入)”;

date()
函数非常灵活,通过不同的格式化字符组合,几乎可以满足所有日常的日期时间显示需求。

2. 使用

DateTime
类 (推荐)

DateTime
类是PHP 5.2.0及更高版本引入的,它提供了一个面向对象的日期时间处理方式,功能更强大,也更易于维护和扩展。在我看来,一旦你习惯了它的用法,你会发现它在处理复杂日期时间逻辑时,比
date()
函数和
strtotime()
的组合要清晰得多。

format('Y-m-d H:i:s') . "\n";

// 创建一个表示特定时间的DateTime对象
$specificDate = new DateTime('2023-01-15 10:30:00');
echo "指定时间 (DateTime 对象): " . $specificDate->format('Y-m-d H:i:s') . "\n";

// DateTime对象同样可以获取Unix时间戳
echo "DateTime对象的Unix时间戳: " . $now->getTimestamp() . "\n";

// 链式操作示例:获取当前时间,然后加上10天,再格式化
$futureDate = (new DateTime())->modify('+10 days');
echo "未来10天的日期 (DateTime 链式操作): " . $futureDate->format('Y-m-d H:i:s') . "\n";
?>

DateTime
类不仅能获取当前时间,还能方便地进行日期时间的加减、比较、时区转换等操作,是现代PHP开发中处理日期时间的标准做法。

PHP日期时间函数中常用的格式化字符有哪些,如何灵活运用?

说起PHP的日期时间格式化,

date()
函数和
DateTime::format()
方法都依赖一套非常精妙的格式化字符。理解并掌握这些字符,是玩转PHP日期时间显示的关键。我个人觉得,这就像是给时间穿上不同款式的衣服,你想要什么风格,就用对应的字符去搭配。

下面是一些我经常用到,也认为非常实用的格式化字符:

  • 年份:
    • Y
      : 四位数字表示的年份(例如:2023)
    • Y
      : 两位数字表示的年份(例如:23)
  • 月份:
    • m
      : 两位数字表示的月份(01到12)
    • n
      : 一位或两位数字表示的月份(1到12,无前导零)
    • m
      : 缩写的月份名称(例如:Jan, Feb)
    • F
      : 完整的月份名称(例如:January, February)
  • 日期:
    • d
      : 两位数字表示的日期(01到31)
    • j
      : 一位或两位数字表示的日期(1到31,无前导零)
  • 星期:
    • d
      : 缩写的星期几名称(例如:Mon, Tue)
    • l
      (小写L): 完整的星期几名称(例如:Monday, Tuesday)
    • 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)
  • 上午/下午:
    • a
      : 小写am/pm
    • a
      : 大写AM/PM
  • 时区:
    • T
      : 时区缩写(例如:EST, PST)
    • Z
      : 时区偏移量(秒),西边是负数,东边是正数
  • Unix时间戳:
    • U
      : Unix时间戳

灵活运用示例:

format('Y年m月d日 H:i:s') . "\n";

// 英文日志风格,带星期和AM/PM
echo "格式二 (英文日志): " . $now->format('D, M j, Y h:i:s A') . "\n";

// 数据库存储的紧凑格式,不带分隔符
echo "格式三 (数据库紧凑): " . $now->format('YmdHis') . "\n";

// 只显示日期,不带年份
echo "格式四 (月日): " . $now->format('m-d') . "\n";

// 结合时区信息
echo "格式五 (带时区): " . $now->format('Y-m-d H:i:s T (P)') . "\n"; // P是ISO 8601格式的时区偏移量
?>

通过这些例子,你会发现,这些格式化字符可以像积木一样随意组合,中间甚至可以插入任意的文本字符(比如“年”、“月”、“日”),来生成你想要的任何日期时间显示效果。这给了开发者极大的自由度。

PHP处理时区(Timezone)的最佳实践是什么,如何避免时间显示错误?

时区问题,说实话,是日期时间处理中最容易踩坑,也最容易被忽视的一环。我见过太多因为服务器时区、PHP配置时区和用户期望时区不一致,导致系统显示时间混乱的案例。要避免这些头疼的问题,最佳实践就是明确地设置和管理时区

1. 全局设置默认时区

最基本的一步,也是我个人认为必须要做的一步,就是在你的PHP应用程序入口(比如

index.php
或某个初始化文件)设置一个默认时区。这能确保所有不指定时区的
date()
函数调用和
DateTime
对象创建都使用这个时区。

Glif
Glif

Glif.app 是一个有趣的AI沙盒工具,用于创建名为 glifs 的微型AI生成器,例如自拍生成器、Meme梗图、表情包、漫画、故事等

下载

选择

UTC
作为默认时区是一个非常好的习惯,尤其是在存储数据到数据库时。这样可以避免夏令时等复杂问题,确保数据存储的统一性。显示给用户时,再根据用户的时区偏好进行转换。

2.

DateTime
对象的时区管理

DateTime
类在时区管理上更加灵活和强大。你可以在创建
DateTime
对象时就指定时区,或者在之后改变它的时区。

format('Y-m-d H:i:s') . "\n";

// 创建一个默认时区的DateTime对象
$localTime = new DateTime();
echo "本地时间: " . $localTime->format('Y-m-d H:i:s') . "\n";

// 将UTC时间转换为本地时区显示
$utcTime->setTimezone(new DateTimeZone('Asia/Shanghai'));
echo "UTC时间转换为本地显示: " . $utcTime->format('Y-m-d H:i:s') . "\n";

// 将本地时间转换为纽约时区显示
$localTime->setTimezone(new DateTimeZone('America/New_York'));
echo "本地时间转换为纽约显示: " . $localTime->format('Y-m-d H:i:s') . "\n";
?>

避免时间显示错误的策略:

  • 数据存储统一化: 强烈建议将所有日期时间数据以UTC时间戳(
    time()
    DateTime::getTimestamp()
    )或UTC格式化字符串存储到数据库。这样可以避免因服务器时区变化或不同服务器之间时区不一致导致的数据混乱。
  • 前端/后端协同: 如果你的应用面向全球用户,那么前端JS获取用户本地时区,然后将时间戳传递给后端,或者后端传UTC时间戳给前端,让前端自行转换显示,是一个非常常见的做法。
  • 明确的时区声明: 永远不要假设服务器的时区就是你想要的时区。使用
    date_default_timezone_set()
    DateTimeZone
    明确指定。
  • 测试: 在不同时区环境下测试你的应用,确保日期时间显示正确。特别是跨越夏令时切换点时,更容易暴露问题。

在我看来,处理时区就像是国际贸易,大家得用一个通用的标准(比如UTC)来交换货物,然后在各自的市场(本地时区)上进行定价和销售。这样才能避免混乱,确保交易的准确性。

PHP中如何进行日期时间的加减运算,实现未来或过去时间的计算?

除了获取当前时间,我们经常需要计算某个日期之前或之后的日期,比如“订单创建时间7天后自动关闭”、“用户上次登录30分钟前”等等。PHP提供了几种方式来处理日期时间的加减运算,从简单的字符串解析到功能强大的面向对象操作,都能满足你的需求。

1.

strtotime()
函数进行简单加减

strtotime()
函数是一个非常强大的日期时间字符串解析器。它能将各种英文文本日期时间描述转换成Unix时间戳,并且支持相对格式,这使得它在进行简单的日期时间加减时异常方便。

strtotime()
的强大之处在于其自然语言的描述能力,对于快速、简单的日期时间操作非常高效。但需要注意的是,它的行为有时可能会因为日期的边界问题(比如月底)而略显“魔幻”,所以对于严谨的业务逻辑,我更倾向于
DateTime
对象。

2.

DateTime
对象的
modify()
方法

DateTime
对象提供了
modify()
方法,它与
strtotime()
使用相同的相对格式字符串,但操作的是
DateTime
对象本身,这让链式操作和面向对象的编程风格更加流畅。

modify('+2 days');
echo "两天后的时间 (modify): " . $twoDaysLater->format('Y-m-d H:i:s') . "\n";

// 从当前时间减去5小时30分钟
$pastTime = (new DateTime())->modify('-5 hours -30 minutes');
echo "5小时30分钟前 (modify): " . $pastTime->format('Y-m-d H:i:s') . "\n";

// 计算下个月的第一个工作日
$nextMonthFirstWeekday = (new DateTime('first day of next month'))->modify('next weekday');
echo "下个月的第一个工作日 (modify): " . $nextMonthFirstWeekday->format('Y-m-d H:i:s') . "\n";
?>

3.

DateTime
对象的
add()
sub()
方法结合
DateInterval

对于更精确、更明确的日期时间加减,尤其是当加减的单位和数量比较复杂时,

DateTime
对象的
add()
sub()
方法结合
DateInterval
类是我的首选。这种方式代码可读性更高,也更不容易出错。

DateInterval
对象代表一个时间间隔,你可以指定年、月、日、时、分、秒等。

add($intervalAdd);
echo "当前时间 + 2年1月3天: " . $futureDateWithInterval->format('Y-m-d H:i:s') . "\n";

// 减去一个间隔:10小时25分钟
$intervalSub = new DateInterval('PT10H25M'); // P表示Period,T表示Time,10H表示10小时,25M表示25分钟
$pastDateWithInterval = clone $now;
$pastDateWithInterval->sub($intervalSub);
echo "当前时间 - 10小时25分钟: " . $pastDateWithInterval->format('Y-m-d H:i:s') . "\n";

// 也可以直接在DateInterval构造函数中传入字符串,就像modify一样
$intervalFromStr = DateInterval::createFromDateString('5 days and 6 hours');
$anotherFutureDate = clone $now;
$anotherFutureDate->add($intervalFromStr);
echo "当前时间 + 5天6小时: " . $anotherFutureDate->format('Y-m-d H:i:s') . "\n";
?>

在我看来,

DateInterval
就像一个精确的计量工具,它让你能够非常清晰地定义你想要加减的时间量,避免了
strtotime()
modify()
在某些复杂场景下可能出现的歧义。对于需要高度精确和可维护性的日期时间运算,我总是倾向于使用
DateInterval

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1856

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1226

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1120

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1398

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号