PHP DateTime объект продвигается до ближайшего 17 числа месяца - PullRequest
2 голосов
/ 08 мая 2019

У меня есть объект PHP DateTime, который выглядит следующим образом ...

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

Есть ли способ продвинуть эту дату до ближайшего 17 числа месяца? Дата начала будет динамичной, поэтому я не могу жестко закодировать ее.

У кого-нибудь есть пример?

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Добавьте один день к своей дате, пока не найдете следующий 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

2 голосов
/ 08 мая 2019

Хитрость в том, чтобы найти первую дату соответствующего месяца, а затем добавить шестнадцать дней.

Эти modify() выражения полезны.

   $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";

И, когда вы тестируете этот видКонечно, проверьте его с днями в декабре и феврале, чтобы убедиться, что логика смены года и пролонгации месяца работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...