0

0

如何解决PHP中复杂时间时长格式转换问题,使用khill/php-duration轻松搞定

PHPz

PHPz

发布时间:2025-07-24 12:38:04

|

173人浏览过

|

来源于php中文网

原创

可以通过一下地址学习composer学习地址

最近在负责一个项目,其中有一个核心功能是记录用户完成某项任务所花费的时间。起初,我们允许用户以多种方式输入时长:比如“1小时30分钟”、“1h 30m”、“90:30”甚至直接输入秒数“5430”。这听起来很灵活,但很快就给我们带来了巨大的麻烦。

遇到的困难:数据格式混乱与解析难题

最大的痛点在于数据格式的混乱。当用户输入“1h 30m”时,我们需要将其转换为统一的秒数进行存储,以便后续进行统计和计算。而当我们需要向用户展示时,可能又需要将秒数转换回“1小时30分钟”或“01:30:00”这样的易读格式。

手动编写解析逻辑简直是一场噩梦。我尝试过使用正则表达式来匹配各种可能的输入格式,但很快发现这不仅代码量巨大,而且难以维护,稍微变动一个输入习惯,整个解析逻辑就可能崩溃。更别提还要处理各种单位(小时、分钟、秒)的转换,以及小数点、缩写等细节,稍有不慎就会导致计算错误。这不仅拖慢了开发进度,还让我对数据的准确性感到担忧。

Composer 与 khill/php-duration:优雅的解决方案

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

正当我焦头烂额之际,我想到了 Composer 这个 PHP 包管理神器。通常,遇到这种通用的、复杂的问题,社区里往往已经有成熟的解决方案。一番搜索后,我发现了 khill/php-duration 这个宝藏级的 Composer 包。

khill/php-duration 是一个专门用于在冒号格式时间、人类可读时间以及秒数之间进行转换的库。它的设计初衷就是为了解决用户输入时长时可能出现的各种格式问题。它能够智能地解析多种输入,并提供统一的输出格式,完美契合了我的需求。

如何使用 khill/php-duration 解决问题

首先,使用 Composer 安装这个库非常简单:

composer require khill/php-duration:~1.0

安装完成后,你就可以在你的PHP代码中引入并使用了。下面是一些实际的应用示例,展示了它是如何轻松应对各种时长格式的:

陌言AI
陌言AI

陌言AI是一个一站式AI创作平台,支持在线AI写作,AI对话,AI绘画等功能

下载

1. 从冒号格式时间到其他格式:

use Khill\Duration\Duration;

$duration = new Duration('7:31');

echo $duration->humanize();  // 输出:7m 31s (人类可读格式)
echo $duration->formatted(); // 输出:7:31 (冒号格式)
echo $duration->toSeconds(); // 输出:451 (转换为秒)
echo $duration->toMinutes(); // 输出:7.5166 (转换为分钟,带小数)
echo $duration->toMinutes(null, 0); // 输出:8 (转换为分钟,四舍五入)
echo $duration->toMinutes(null, 2); // 输出:7.52 (转换为分钟,保留两位小数)

2. 从人类可读格式到其他格式:

khill/php-duration 强大之处在于它能理解多种人类可读的输入,无论是“1h 2m 5s”还是“4 Hr. 32 Min.”,它都能正确解析。

use Khill\Duration\Duration;

$duration = new Duration('1h 2m 5s');

echo $duration->humanize();  // 输出:1h 2m 5s
echo $duration->formatted(); // 输出:1:02:05
echo $duration->toSeconds(); // 输出:3725
echo $duration->toMinutes(); // 输出:62.0833

甚至你可以配置每天的工作小时数,让它处理更复杂的“天”单位:

use Khill\Duration\Duration;

// 配置每天6小时
$duration = new Duration('1.5d 1.5h 2m 5s', 6);

echo $duration->humanize();  // 输出:1d 4h 32m 5s
echo $duration->formatted(); // 输出:10:32:05
echo $duration->toSeconds(); // 输出:37925

3. 从秒数到其他格式:

如果你已经有了秒数,也可以方便地将其转换回其他格式进行展示:

use Khill\Duration\Duration;

$duration = new Duration('4293'); // 4293秒

echo $duration->humanize();  // 输出:1h 11m 33s
echo $duration->formatted(); // 输出:1:11:33
echo $duration->toSeconds(); // 输出:4293

值得一提的是,你甚至不需要每次都创建新的 Duration 对象,可以直接将值传递给方法进行转换,非常灵活:

use Khill\Duration\Duration;

$duration = new Duration; // 创建一个实例

echo $duration->humanize('1h 2m 5s');  // 输出:1h 2m 5s
echo $duration->formatted('1h 2m 5s'); // 输出:1:02:05
echo $duration->toSeconds('1h 2m 5s'); // 输出:3725

总结其优势与实际应用效果

khill/php-duration 这个库的引入,彻底解决了我们项目中时间时长格式转换的痛点,带来了显著的优势:

  1. 极大地简化了开发工作量: 我们不再需要编写复杂的正则表达式和条件判断来解析和格式化时间,一行代码就能搞定。
  2. 提高了数据准确性和一致性: 无论用户输入何种格式,最终都能统一转换为秒数进行存储,避免了因格式不一导致的数据混乱和计算错误。
  3. 提升了用户体验: 用户可以根据自己的习惯输入时长,系统能够智能识别并正确处理,减少了因输入格式不符而产生的困扰。
  4. 代码更简洁、可读性更强: 复杂的转换逻辑被封装在库中,我们的业务代码变得更加聚焦和清晰。
  5. 支持多种单位和精度: 从小时到秒,甚至微秒,都能得到很好的支持,满足了不同场景的需求。

总而言之,khill/php-duration 是一个非常实用且高效的 PHP 库,它让时间时长处理变得前所未有的简单。如果你在项目中也面临类似的问题,强烈推荐你尝试一下,它绝对能让你从繁琐的字符串解析中解脱出来,专注于核心业务逻辑的实现。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

154

2023.12.25

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

251

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

746

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

215

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

236

2023.11.17

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

2

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.5万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 6.9万人学习

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

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