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

PHP将Y-m-d格式日期转为Y,m,d格式输出错误如何解决?

问题原因
  • 核心错误1:$dd=2021-8-28; 没有给日期值加引号,PHP会将其识别为算术表达式,计算结果为 2021 - 8 - 28 = 1985,所以$dd实际存储的是整数1985,完全不是你预期的日期字符串。
  • 核心错误2:即使给$dd加上引号拿到正确的日期字符串,你提前把横杠替换为逗号的操作也会导致strtotime()无法识别逗号分隔的日期格式,返回布尔值false。date()函数接收到非法时间戳参数时,会默认使用Unix纪元起始时间偏移计算输出,自然和预期结果完全不符。
修复方案

方案1:直接格式化原始日期字符串(最简实现)

不需要提前替换分隔符,拿到合法的日期字符串后直接用strtotime解析再格式化即可:

<?php 
// 日期值加引号声明为字符串
$dd = "2021-8-28";
date_default_timezone_set('UTC');
// 直接解析原始日期格式,再按目标格式输出
$newdat = date("Y,m,d", strtotime($dd));
echo $newdat;
?>

运行后输出:2021,08,28

方案2:使用DateTime类(兼容性更强,避免解析歧义)

如果日期格式不固定,更推荐用DateTime类指定输入格式解析,完全避免strtotime的自动解析误差:

<?php
$dd = "2021-8-28";
date_default_timezone_set('UTC');
$date = DateTime::createFromFormat('Y-n-j', $dd);
$newdat = $date->format('Y,m,d');
echo $newdat;
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:39:05