PHP OOP DateTime ModifyDate小数位错误

PHP OOP DateTime ModifyDate小数位错误,php,oop,datetime,Php,Oop,Datetime,如果我使用以下代码 $averageWeeks = 2.7; $laidDate->modify('+'.$averageWeeks.' week'); $averageWeeks = 3; $laidDate->modify('+'.$averageWeeks.' week'); 我返回了2014年5月31日的日期,但是如果我使用以下代码 $averageWeeks = 2.7; $laidDate->modify('+'.$averageWeeks.' week');

如果我使用以下代码

$averageWeeks = 2.7;
$laidDate->modify('+'.$averageWeeks.' week');
$averageWeeks = 3;
$laidDate->modify('+'.$averageWeeks.' week');
我返回了2014年5月31日的日期,但是如果我使用以下代码

$averageWeeks = 2.7;
$laidDate->modify('+'.$averageWeeks.' week');
$averageWeeks = 3;
$laidDate->modify('+'.$averageWeeks.' week');

我得到的日期是2014年5月3日,这是正确的。有没有办法在日期修改方法中使用小数点?

假设您从4月12日开始,那么5月3日将是3周,5月31日将是7周。所以我猜当你通过“2.7”时,它忽略了字符串的“2.”部分

可以考虑单独计算日数,如:

$averageWeeks = 2.7;
$averageDays = floor($averageWeeks * 7);
$laidDate->modify('+'.$averageDays.' days');
还要考虑2.7周等于18.9天。通过
发言
,我们增加了18天。除非你也打算改变一天中的时间,否则在这里添加分数天是没有意义的。如果您这样做了,您将不得不做一些额外的计算,因为
modify
add
似乎都不支持分数。你可以这样做:

$averageWeeks = 2.7;
$averageSeconds = floor($averageWeeks * 7 * 24 * 60 * 60);
$laidDate->modify('+'.$averageSeconds.' seconds');

但是,如果你认为这个时间是准确的,你可能会自欺欺人,因为不是每个地方的一天都有24个小时,这是由于时间的转换。

我实际上已经过了整天或小数周,所以我想我可能不得不做这个的一天版本,看看我是否可以修改我的脚本来反映这一点。谢谢你的回答:)我可以确认用几天而不是几周的时间可以得到更准确的结果,所以谢谢你!没问题。此外,您还可以考虑使用<代码>添加< /代码>,而不是使用加号来代替<代码>修改< /代码>。它将做同样的事情,但结果代码更清晰。