如何使用PHP创建全零格式的DateTime实例?
怎么实现显示为0000:00:0:00:00的全零日期时间
嘿,我来帮你搞清楚这个问题!你之前的代码输出-0001:49:30:00:00是因为PHP的DateTime类基于真实公历,而公历里根本没有公元0年——公元前1年(也就是输出里的-0001)之后直接就到公元1年了。当你调用setDate(0,0,0)时,这个完全无效的日期会被自动修正成合法的日期,于是就变成了公元前1年的对应日期,自然和你想要的全零格式不一样。
那该怎么达到你想要的效果呢?分两种场景来给你方案:
场景1:只是要输出指定格式的全零字符串
如果不需要对这个"日期"做任何计算、比较之类的操作,只是要输出0000:00:0:00:00,那最简单的方式就是直接输出字符串就行,没必要绕弯子用DateTime:
echo "0000:00:0:00:00";
场景2:必须用DateTime对象处理(比如要和其他日期统一格式)
如果业务逻辑要求必须用DateTime对象,但又需要输出全零格式,你可以先判断这个对象是不是被修正成了那个特殊的公元前日期,然后手动替换输出:
// 初始化后会自动修正为-0001-11-30 00:00:00 $date = new DateTime("0000-00-00 00:00:00"); // 检查是否是那个被修正后的特殊日期 if ($date->format('Y-m-d') === '-0001-11-30') { echo "0000:00:0:00:00"; } else { // 正常日期就按你的格式输出 echo $date->format("Y:W:j:H:i"); }
要记住的是,DateTime本身没法真正表示"全零"日期时间,因为这在真实历法里是不存在的,所以只能通过这种特殊处理来实现你要的显示效果。
内容的提问来源于stack exchange,提问作者Lets Play Nebulous
相关产品推荐
相关产品推荐

