Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
PHP strtotime() 日期时间解析错误:无效格式导致的问题与解决方案_创想鸟

PHP strtotime() 日期时间解析错误:无效格式导致的问题与解决方案

PHP strtotime() 日期时间解析错误:无效格式导致的问题与解决方案

本文深入探讨了php `strtotime()` 函数在处理日期时间字符串时,因12小时制与24小时制混用而导致解析失败的问题。当输入字符串格式不规范时,`strtotime()` 可能返回unix纪元之前的日期(如1969年),而非预期的转换结果。教程将分析问题根源,并提供使用纯24小时制、正确12小时制以及更严格的`datetime::createfromformat()`方法来解决此类问题的实践方案。

在PHP开发中,strtotime() 函数因其强大的灵活性而广泛应用于日期时间字符串的解析。然而,当输入字符串的格式存在歧义或不规范时,strtotime() 可能会返回意料之外的结果,例如将日期解析为 1969-12-31 16:00:00。这种现象通常不是PHP的bug,而是由于对日期时间格式的误解导致解析器无法正确识别。

问题根源分析

strtotime() 函数尝试解析各种英文日期时间格式。当它遇到一个无法明确识别的字符串时,通常会返回 false。在某些PHP版本或操作系统环境下,false 在进行隐式类型转换时可能被视为 0,而 0 对应的Unix时间戳是 1970-01-01 00:00:00 UTC。由于时区偏移,这在本地时间可能显示为 1969-12-31 的某个时间。

问题的核心在于混淆了12小时制(AM/PM)和24小时制。例如,给定一个字符串 “2021-12-16 13:42:46 PM”,strtotime() 会感到困惑。

13:42:46 明确是一个24小时制的时间,其中 13 表示下午1点。PM 是12小时制中表示下午的指示符,它通常与小时数 1 到 12 结合使用。

将 13(24小时制)与 PM(12小时制)同时使用,形成了一个语法上不一致的日期时间字符串。strtotime() 在尝试解析 13:42:46 PM 时无法理解这种混合格式,因此解析失败。

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

以下是导致问题的示例代码及其输出:


正确处理日期时间格式

为了避免此类解析错误,我们需要确保提供给 strtotime() 或其他日期时间解析函数的字符串格式是明确且一致的。

方法一:使用纯24小时制

如果您的时间数据已经是24小时制,则不应添加 AM 或 PM 指示符。


方法二:使用正确12小时制

如果您的时间数据是12小时制,请确保小时数在 1 到 12 之间,并正确使用 AM 或 PM。


在这个例子中,01:42:46 PM 被 strtotime() 正确解析为下午1点42分46秒,然后 date() 将其格式化为24小时制的 13:42:46。

方法三:利用 DateTime 对象进行更严格的解析

对于需要更严格或自定义格式解析的场景,推荐使用 DateTime::createFromFormat() 方法。它允许您明确指定输入字符串的格式,如果字符串不符合该格式,则会返回 false,从而避免 strtotime() 可能产生的模糊解析问题。

format('Y-m-d H:i:s') . "n";} else {    echo "DateTime (24h) 解析失败!n";}// 示例2: 解析正确12小时制字符串// 注意:'A' 用于匹配 'AM' 或 'PM'$dateString12h = "2021-12-16 01:42:46 PM";$dateTime12h = DateTime::createFromFormat('Y-m-d h:i:s A', $dateString12h);if ($dateTime12h instanceof DateTime) {    echo "DateTime (12h): " . $dateTime12h->format('Y-m-d H:i:s') . "n";} else {    echo "DateTime (12h) 解析失败!n";}// 示例3: 尝试解析错误格式字符串 (13:42:46 PM)$invalidDateString = "2021-12-16 13:42:46 PM";// 尝试用24小时制格式解析,但字符串含有PM$invalidDateTime1 = DateTime::createFromFormat('Y-m-d H:i:s', $invalidDateString);// 尝试用12小时制格式解析,但小时数是13$invalidDateTime2 = DateTime::createFromFormat('Y-m-d h:i:s A', $invalidDateString);if (!$invalidDateTime1 instanceof DateTime) {    echo "DateTime (无效格式1) 解析失败!n"; // 会触发}if (!$invalidDateTime2 instanceof DateTime) {    echo "DateTime (无效格式2) 解析失败!n"; // 会触发}?>

DateTime::createFromFormat() 的优点在于它强制要求输入字符串与指定格式完全匹配。如果格式不匹配,它将返回 false,这使得错误处理更加直观和可靠。

注意事项与最佳实践

始终验证输入格式: 在处理用户输入或外部数据时,务必验证日期时间字符串的格式是否符合预期,以避免解析错误。优先使用 DateTime 对象: DateTime 类及其相关方法(如 createFromFormat(), format(), add(), sub() 等)提供了更强大、更面向对象的日期时间处理能力,并且在错误处理方面比 strtotime() 更加健壮。理解 strtotime() 的局限性: 尽管 strtotime() 非常方便,但其灵活的解析方式有时会导致模糊或意想不到的结果。在对格式有严格要求或需要精确控制的场景下,应避免单独使用 strtotime()。考虑时区: PHP的日期时间函数默认使用服务器的时区设置。在进行日期时间操作时,尤其是在跨时区应用中,应通过 date_default_timezone_set() 函数或 DateTimeZone 对象明确设置和处理时区。

总结

strtotime() 函数将日期解析为 1969-12-31 的问题并非PHP的bug,而是由于提供了不规范的日期时间字符串,具体来说是混淆了12小时制和24小时制。要解决此问题,关键在于提供格式一致且明确的日期时间字符串,例如纯24小时制(YYYY-MM-DD HH:MM:SS)或正确的12小时制(YYYY-MM-DD hh:MM:SS AM/PM)。对于需要更严格控制和错误处理的场景,强烈推荐使用 DateTime::createFromFormat() 方法,它能确保日期时间字符串按照预期的格式进行解析。遵循这些实践可以显著提高日期时间处理的准确性和代码的健壮性。

以上就是PHP strtotime() 日期时间解析错误:无效格式导致的问题与解决方案的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1341311.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WordPress网站中混淆PHP代码的识别与安全处理指南
上一篇 2025年12月13日 04:36:56
PHP长驻进程在服务器重启后如何检测与自动恢复:非管理员环境下的策略
下一篇 2025年12月13日 04:37:18

相关推荐

  • Laravel 8 登录后重定向到仪表盘的完整教程

    本教程详细介绍了在 Laravel 8 中实现用户登录后重定向到仪表盘的多种方法。我们将探讨如何利用 Laravel 内置的 $redirectTo 属性,以及如何通过重写 LoginController 中的 login 方法来实现自定义重定向逻辑。此外,教程还将重点讲解正确的路由配置和中间件使用…

    2026年9月21日
    000
  • mac怎么使用磁盘工具_mac磁盘工具使用教程

    使用磁盘工具可解决Mac外接存储问题。1. 打开磁盘工具,选择设备后点击“急救”扫描修复错误;2. 通过“抹掉”功能将设备格式化为APFS或Mac OS扩展以提升兼容性;3. 利用“分区”功能划分硬盘为多个宗卷,便于数据管理;4. 创建空白磁盘映像用于备份,或恢复.dmg文件至U盘制作启动盘。 如果…

    2026年9月21日
    100
  • PHP一键环境如何配置URL重写_URL Rewrite规则设置

    开启Apache的mod_rewrite模块并配置AllowOverride All,再在.htaccess中添加重写规则,即可实现URL重写,使URL更简洁利于SEO。 在使用PHP一键环境(如XAMPP、WAMP、phpStudy等)时,开启URL重写(URL Rewrite)功能可以让网站的U…

    2026年9月21日
    100
  • 解决WordPress wp-settings.php中致命错误的实用指南

    当WordPress网站遭遇wp-settings.php中Call to undefined function的致命错误时,通常意味着核心文件已损坏。本教程将指导您通过下载全新WordPress副本并替换站点中wp-admin和wp-includes目录来有效解决此问题,确保网站恢复正常运行,并提…

    2026年9月21日
    000
  • 1688阿里巴巴官网网址 1688阿里巴巴批发商城入口

    1688阿里巴巴官网网址是https://www.1688.com,该平台商品种类丰富,涵盖工业品与消费品,支持行业分类查找、厂家直供和热门榜单更新。 1688阿里巴巴官网网址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来1688阿里巴巴批发商城入口,感兴趣的网友一起随小编来瞧瞧吧! h…

    2026年9月21日
    000
  • 如何从被调用类中获取调用者文件的命名空间

    本文探讨了在PHP中,如何在不通过参数传递的情况下,从一个被调用的工具类中获取到调用该方法的文件的命名空间。通过结合使用`debug_backtrace()`回溯调用栈以定位调用者文件,并利用`token_get_all()`解析文件内容来提取命名空间声明,提供了一种实用的解决方案。文章详细介绍了实…

    2026年9月21日
    000
  • 百度网盘官方网页登录 百度网盘网页版入口快捷

    百度网盘官方网页登录入口是https://pan.baidu.com,用户可直接访问该网址登录账号,主界面布局清晰,支持文件上传下载、智能检索、跨设备同步及在线预览等功能。 百度网盘官方网页登录入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来百度网盘网页版入口快捷方式,感兴趣的网友一起…

    2026年9月21日
    100
  • 实现搜索结果的 A-Z 排序:PHP 教程

    本文档旨在指导开发者如何在 PHP 中实现搜索结果的 A-Z 排序功能。通过结合 AJAX 技术和 PHP 函数,可以方便地对通过 POST 方法获取的医生搜索结果进行 A-Z 排序,从而优化用户浏览体验。本文将详细介绍实现步骤,提供可复用的代码示例,并着重强调注意事项,旨在帮助开发者快速掌握并应用…

    2026年9月21日
    000
  • MacBookPro怎么下VSCode_MacBookPro下载安装VSCode详细教程

    访问code.visualstudio.com下载Mac通用版安装包;2. 解压后将Visual Studio Code.app拖入“应用程序”文件夹;3. 首次运行需右键选择“打开”以绕过安全限制;4. 推荐安装Python、Prettier等常用插件并配置环境变量;5. 若字体模糊可调整zoom…

    2026年9月21日
    000
  • Evernote如何快速搜索内容 Evernote高级搜索技巧大全

    掌握印象笔记高级搜索技巧可大幅提升效率:首先利用intitle:、tag:、created:等操作符精确查找标题、标签或日期范围内的笔记;其次通过组合多个条件如intitle:项目计划 tag:工作 created:202510实现复合筛选,并用减号排除无关结果;最后启用OCR功能,使图片和扫描PD…

    2026年9月21日
    000
  • PHPComposer怎么安装_PHPComposer依赖管理工具安装与使用指南

    PHPComposer是PHP的依赖管理工具,类似npm或pip。需先安装PHP,再下载并验证composer-setup.php,执行安装生成composer.phar,推荐全局安装至/usr/local/bin/composer,运行composer –version验证。使用com…

    2026年9月21日
    000
  • 一周学会蝴蝶号无人直播的完整课程计划推荐

    一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐一周学会蝴蝶号无人直播的完整课程计划推荐

    掌握“蝴蝶号”无人直播的核心要义,一周内可搭建初步系统并具备独立操作能力。1.第一天厘清概念并完成基础环境搭建;2.第二天熟悉obs基础操作与场景构建;3.第三天准备高质量内容素材并确定风格;4.第四天设置自动化逻辑与推流配置;5.第五天处理互动机制及常见问题;6.第六天进行首次正式直播并复盘;7.…

    2026年9月21日 • 用户投稿
    100
  • tiktok网络使用链接 tiktok网页版入口地址

    TikTok网页版入口地址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来TikTok网页版入口地址,感兴趣的网友一起随小编来瞧瞧吧! https://www.tiktok.com 1、提供多样化的短视频内容,涵盖生活记录、才艺展示等多个领域。 2、界面设计简洁直观,用户可以快速上手并流畅…

    2026年9月21日
    200
  • PHP/MySQL:高效合并订单商品并按日期分组显示

    本教程将指导如何在PHP/MySQL应用中,将同一日期的订单商品合并显示在同一行,以提高数据展示的清晰度。核心解决方案是利用MySQL的GROUP_CONCAT函数在数据库层面进行高效聚合,避免复杂的PHP逻辑处理,从而简化代码并优化性能。 订单数据展示的常见挑战 在开发在线购物平台时,通常需要向用…

    2026年9月21日
    100
  • 俄罗斯Яндекс账号登录入口 Yandex电脑版官方网站登录

    答案是https://www.yandex.com/。该网站提供搜索、地图、新闻、翻译等服务,界面简洁,支持个性化设置与账户同步,并拥有邮箱、云存储及丰富的应用生态。 1、立即进入“☞☞☞☞点击俄罗斯yandex搜索引擎入口☜☜☜☜”; 2、立即进入“☞☞☞☞点击快速获取Yandex免登录官网链接☜…

    2026年9月21日
    000
  • Xdebug性能优化:解决PHP调试器导致页面加载缓慢或超时的问题

    当Xdebug配置不当,即使未主动调试,也可能导致PHP应用页面加载缓慢或超时。本文将深入探讨Xdebug的工作原理,指导如何通过正确配置xdebug.mode、排查多配置文件冲突,并利用Xdebug日志进行诊断,从而有效解决调试器造成的性能瓶颈,确保开发环境的流畅运行。 理解Xdebug的连接机制…

    2026年9月21日
    000
  • Microsoft Teams如何使用快捷键 Microsoft Teams操作效率的提升秘籍

    答案:掌握Microsoft Teams快捷键可提升操作效率。依次介绍聊天窗口、视图切换、通话控制、静音、摄像头、屏幕共享、快速参会、结束会议、消息状态、搜索、换行、命令面板、自定义设置、Tab导航、表情符号及字体调整等快捷操作。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用…

    2026年9月21日
    000
  • 卢伟冰:功能手机、智能手机之后 手机行业正进入新周期

    9月4日,小米集团总裁卢伟冰表示,继功能机时代与智能机时代之后,全球手机产业正迈入一个全新时代。 卢伟冰今日在社交平台发文提到:“我从2002年进入手机行业,有幸完整见证了功能手机和智能手机两大发展阶段。如今,AI时代已经到来,整个行业正在酝酿深刻变革,步入全新的发展周期。” 回望过去,功能手机时期…

    2026年9月21日
    200
  • 谷歌浏览器官方主站入口 最新Chrome在线登录页面

    谷歌浏览器官方主站入口是https://www.google.com,该页面具备界面简洁、操作流畅、集成化服务入口和个性化推荐等特点,支持多设备访问且无广告干扰。 谷歌浏览器官方主站入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来谷歌浏览器最新Chrome在线登录页面相关信息,感兴趣的…

    2026年9月21日
    000
  • win11怎么退回win10系统_win11降级回win10系统操作教程

    可在10天内通过系统恢复功能退回Windows 10,保留文件但卸载新增应用;超期则需用媒体工具或第三方软件重装,后者操作更简便但会清除数据。 如果您最近将系统升级到 Windows 11,但发现使用不习惯或存在兼容性问题,则可以考虑退回至 Windows 10。在特定时间窗口内,Windows 提…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信