如何将形如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
相关产品推荐
相关产品推荐

