PHP DateTime对象前进到该月的最近一天

时间:2019-05-08 13:22:56

标签: php datetime

我有一个看起来像这样的PHP DateTime对象...

$startdate = '01/05/2019';
$mydate = DateTime::createFromFormat("d/m/Y", $startdate);

是否可以将此日期提前到每月的最近17日?开始日期是动态的,因此我无法对其进行硬编码。

有人举榜吗?

2 个答案:

答案 0 :(得分:3)

在日期中增加一天,直到找到下一个17日。

<?php
$startdate = '2019-01-05';
$interval = new DateInterval('P1D'); // define interval as 1 day
$date = new DateTime($startdate);

while($date->format('j') != 17){
    $date->add($interval);
}
echo $date->format('Y-m-d') . "\n";

输出:2019-01-17

答案 1 :(得分:2)

这里的诀窍是找到适当月份的第一个日期,然后加上16天。

这些modify() expressions很有帮助。

   $mydate->modify ("first day of this month")->modify("+ 16 days");
   $mydate->modify ("first day of next month")->modify("+ 16 days");

接下来,您可以确定要哪个:

  if ($mydate->format("d") > 17) ...

像这样将它们放在一起:

$mydate = DateTime::createFromFormat("d/m/Y", $startdate);
if ($mydate->format("d") > 17) {
   $mydate->modify ("first day of this month")->modify("+ 16 days");
}
else {
   $mydate->modify ("first day of next month")->modify("+ 16 days");

echo $mydate->format('Y-m-d') . "<br/>\r\n";

并且,当您测试这种事情时,请务必在12月和2月使用几天进行测试,以确保年累计和月累计逻辑正确运行。