PHP字符串与日期对象互转怎做_PHP串与对象互转方式【操作】
技术百科
雪夜
发布时间:2026-01-15
浏览: 次 PHP中解析日期字符串最稳妥用date_create()或new DateTime(),但需检查false;歧义格式建议用DateTime::createFromFormat()严格匹配;转字符串必用format()方法,注意时区影响。
PHP中用 date_create() 解析字符串成日期对象
字符串转 DateTime 对象,最常用也最稳妥的是 date_create()(或其面向对象写法 new DateTime()),它能自动识别常见格式如 "2025-03-15"、"15/03/2025"、"2025-03-15 14:22:07"。
但要注意:解析失败时不会报错,而是返回 false,必须显式检查:
$date = date_create("2025-02-30");
if ($date === false) {
echo "日期无效:无法解析";
}
- 含歧义格式(如
"01/02/2025")在不同地区可能被解释为“1月2日”或“2月1日”,建议明确指定时区和格式 - 若需严格按固定格式解析(如只接受
Y-m-d),应改用DateTime::createFromFormat() -
date_create()默认使用系统时区;若字符串含时区信息(如"2025-03-15T10:30:00+08:00"),会正确提取并设置
用 DateTime::createFromFormat() 按模板解析字符串
当输入格式固定且不容出错(比如接收 API 返回的 "d/m/Y H:i" 字符串),必须用 DateTime::createFromFormat()。它不猜测,只匹配,失败直接返回 false,且可配合 date_get_last_errors() 查错。
示例:解析 "15/03/2025 14:22"
$date = DateTime::createFromFormat("d/m/Y H:i", "15/03/2025 14:22");
if ($date === false) {
$errors = date_get_last_errors();
if (!empty($errors['errors'])) {
echo "解析失败:" . implode("; ", $errors['errors']);
}
}
- 格式字符必须严格对应:
d是带前导零的日,j是无前导零的日;m和n同理 - 若字符串含多余空格或不可见字符,
trim()掉再传入,否则易静默失败 - 该方法不自动处理时区;若需设时区,调用
$date->setTimezone(new DateTimeZone('Asia/Shanghai'))
用 DateTime::format() 将对象转为指定格式字符串
DateTime 对象转字符串,唯一推荐方式是调用实例的 format() 方法。它接受标准格式字符(如 "Y-m-d H:i:s"),输出确定、可控、无歧义。
$dt = new DateTime("2025-03-15 10:30:45");
echo $dt->format("Y年m月d日 H:i"); // 输出:2025年03月15日 10:30
- 不要用
(string) $dt或echo $dt—— 它们输出 ISO 8601 格式(如"2025-03-15T10:30:45+08:00"),不可控且含时区偏移 - 格式中特殊字符(如中文、括号、冒号)需用反斜杠
转义,例如
"\【Y年m月d日\】" - 若需输出 Unix 时间戳,用
$dt->getTimestamp(),别用format("U")(虽等效但语义不清)
时区与时间戳转换容易被忽略的细节
字符串 → 对象 → 字符串整个链路中,时区不是透明的。同一个时间点,在不同时区下 format() 出来的结果完全不同,而 getTimestamp() 始终是 UTC 秒数。
- 用
date_create("2025-03-15")创建的对象,默认绑定当前 PHP 时区(由date_default_timezone_get()返回),不是 UTC - 若原始字符串不含时区(如
"2025-03-15"),应明确用setTimezone()指定其本意所属时区,再转存或比较 - 跨时区显示时,不要靠字符串拼接“加8小时”,务必用
setTimezone()切换对象时区后format()
真正麻烦的从来不是语法,而是没意识到字符串里那个“2025-03-15”到底属于哪个时区、想让它在页面上代表哪个时区的时间。
# ai
# 的是
# 意识到
# 它在
# 它能
# 不清
# 想让
# 若需
# 自动识别
# format
# 对象
# String
# 字符串
# 报错
# php
# echo
# unix
# 面向对象
# date
# 不含
# php字符串
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何解决Windows时间不准的问题?(自动同步设
- Python装饰器设计思路_功能增强机制说明【指导
- Python lxml的etree和Element
- php删除数据怎么加限制_带where条件删除避免
- Windows10电脑怎么设置电源按钮_Win10
- Win11怎么设置屏保_Windows 11屏幕保
- Win11如何关闭小娜Cortana Win11禁
- Win11怎么设置ip地址_Windows 11手
- c++的STL算法库find怎么用 在容器中查找指
- php8.4匿名类怎么用_php8.4匿名类创建与
- Windows10怎么查看硬件信息_Windows
- 如何使用Golang理解结构体指针方法接收者_Go
- Win11怎么更改管理员名字 Win11修改账户名
- php打包exe如何加密代码_防反编译保护方法【技
- c++中的Tag Dispatching是什么_c
- c# 如何深拷贝和浅拷贝
- Windows10系统怎么查看CPU温度_Win1
- C++如何使用std::optional?(处理可
- Windows 10怎么隐藏特定更新补丁_Wind
- C++ STL算法库怎么用?C++常用算法函数(s
- 如何使用 Selenium 正确获取篮球参考网站球
- php做exe支持多线程吗_并发处理实现方式【详解
- php怎么操作Redis_Redis扩展连接与基本
- Mac如何设置动态壁纸?(让桌面动起来)
- 如何使用Golang实现路由分组管理_Golang
- 如何在Golang中实现微服务服务拆分_Golan
- Windows10如何更改桌面图标间距_Win10
- 跨文件调用类方法怎么用_php作用域操作符与自动加
- Win11怎么关闭搜索历史_Win11清除设备上的
- Python性能剖析高级教程_cProfileLi
- 如何使用 Python 合并文件夹内多个 Exce
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- MAC如何安装Git版本控制工具_MAC开发环境配
- Win11怎么关闭搜索历史 Win11清除搜索框最
- LINUX怎么设置系统语言_LINUX修改中文环境
- 如何在Golang中处理二进制数据_Golang
- Windows怎样关闭锁屏广告_Windows关闭
- 手机php文件怎么变成mp4_安卓苹果打开php转
- Win11怎么清理C盘系统错误报告_Win11清理
- Windows10蓝屏SYSTEM_SERVICE
- 如何使用Golang搭建Web开发环境_快速启动H
- Windows驱动无法加载错误解决方法_驱动签名验
- Win11开机Logo怎么换_Win11自定义启动
- Win11怎么设置虚拟内存_Windows 11优
- 如何在 Go 中判断变量是否为函数类型
- Go 中 := 短变量声明的类型推导机制详解
- Python数据挖掘进阶教程_分类回归与聚类案例解
- Windows7怎么找回经典开始菜单_Window
- PHP怎么接收前端传的时间戳_处理时间戳参数转换技
- 获取 PHP 文件最后修改时间的正确方法


QQ客服