PHP DateTime正确地舍入了几个月的缺失日期数字?

时间:2016-10-31 23:20:24

标签: php datetime

这是我第一次使用内置的DateTime类,但是我们必须根据前/后的月份进行计算,并在输入一个月内存在的日期数时得到一些有趣的结果不是另一个,我不确定PHP是否真的准确地做到了! (顺便说一句,我只在v5.2遗留代码上测试了这个,我现在必须继续处理)

例如,如果我输入今天的日期(2016-10-31),减去6个月(使用 - >修改(' -6个月')),输出日期(使用 - >格式(' Ym-d'))是5月1日! (2016年5月1日)。这意味着PHP只是在下个月向上移动(因此2月29日非闰年是3月1日,30日是3月2日,31日是3月3日等)。

使用这个逻辑,我推断5月31日减去1个月将是5月1日,这是我测试它的时候!

这是按月添加/减去的准确方法吗?我不确定我们的部门是否按照这种方式计算,但我很好奇是否有其他人遇到过这种情况。

1 个答案:

答案 0 :(得分:0)

这有点宽......但

你的思考方式是

  

2016-10-31 - 6个月= 2016-04-30

PHP正在考虑这样

$date = new DateTime('2016-10-31');
$date->modify('-6 months'); // PHP subtracts 183 days in all the tests I ran
echo $date->format('Y-m-d'); // 2016-05-01

你将不得不提出自己的方法,因为modify基本上是对几个月的猜测,可能是28-31天。换句话说,如果您不需要高精度,PHP会做很多“足够好”的事情。