You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将形如171125的数字转为2017.11.25格式?尝试number_format无效

解决6位日期数字转YYYY.MM.DD格式的问题

嘿,我来帮你搞定这个日期格式化的需求!你手里的是6位YYMMDD格式的数字(比如171125),要转成20YY.MM.DD的形式,之前加前缀20的思路是对的,但number_format确实不适合这个场景——它是用来处理数字的数值格式化(比如千分位分隔、小数位数),不是按字符串位置拆分的,所以没用很正常。

给你几个实用的PHP解决方案,按需选择就行:

方法一:字符串截取拼接(直观简单)

因为你的数字是固定6位,直接拆成年、月、日三部分再拼接最容易理解:

$number = '171125'; // 你的原始变量
// 拆分各部分
$year = '20' . substr($number, 0, 2); // 取前2位加前缀20
$month = substr($number, 2, 2); // 取中间2位作为月份
$day = substr($number, 4, 2); // 取最后2位作为日期
// 拼接成目标格式
$formattedDate = "$year.$month.$day";
echo $formattedDate; // 输出:2017.11.25

方法二:正则表达式替换(一步到位)

用正则把6位数字分成三个两位的分组,直接替换成带前缀和分隔符的格式,代码更简洁:

$number = '171125';
$formattedDate = preg_replace('/(\d{2})(\d{2})(\d{2})/', '20$1.$2.$3', $number);
echo $formattedDate; // 输出:2017.11.25

这里的正则(\d{2})(\d{2})(\d{2})会把6个数字拆成三个捕获组,替换时用20$1.$2.$3直接拼出目标格式,一步完成转换。

方法三:DateTime类(专业且带日期验证)

如果需要确保输入的是合法日期,用PHP的DateTime类更靠谱——它会自动验证日期有效性(比如不会把171332这种无效日期转成2017.13.32):

$number = '171125';
// 按YYMMDD格式解析成日期对象
$date = DateTime::createFromFormat('ymd', $number);
// 格式化成YYYY.MM.DD
$formattedDate = $date->format('Y.m.d');
echo $formattedDate; // 输出:2017.11.25

如果输入的是无效日期,createFromFormat会返回false,你还可以额外加判断逻辑处理错误情况。

内容的提问来源于stack exchange,提问作者Kafus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:57:13