2017-02-15 4 views
2

Как я могу получить второй понедельник после даты ввода? у меня есть решение, но это не представляется возможнымПолучите следующий следующий понедельник в PHP

$date = new DateTime(); 
$date->modify('next monday'); 
$next_monday = $date->format('Y-m-d'); 
$date = new DateTime($next_monday); 
$date->modify('next monday'); 
$next_monday = $date->format('Y-m-d'); 

Пожалуйста, предложите мне какой-то способ сделать это.

+0

см [StrToTime()] (http://php.net/strtotime) –

+1

каких о дате $ = новый DateTime ('следующего понедельника'); $ date-> изменить ('+ 7 день'); ? –

ответ

1

modify метод вашего DateTime объекта принимает тот же тип аргументов, что strtotime делает. Вы уже используете 'next monday', вам просто нужно использовать 'second monday'.

$date->modify('second monday'); 
echo $date->format('Y-m-d'); 

Кроме того, в случае, если вы не знали этого, некоторые из методов DateTime может быть прикован:

echo $date->modify('second monday')->format('Y-m-d'); 
+0

Вы проверили, что он работает? –

+1

@ ma_dev_15 да, это сработало для меня. Разве это не сработало для вас? –

0

Возможно, есть еще один способ сделать это, но используя MomentPHP Вы можете начать с сегодняшней недели, добавив 1 день (чтобы добраться до понедельника), а затем добавив две недели, вы доберетесь до второго следующего понедельника.
Нечто подобное:

<?php 
$m = \Moment\moment(); 
$sunday = $m->startOf('week'); 
$monday = $sunday->addDays(1); 
$2nextMonday = $monday->addWeeks(2); 
2

Вы можете сделать это с strtotime(), но если вы думаете, что это слишком дорого, вы могут использовать date и DateInterval.

$date = new DateTime('2017-02-15 13:03:00'); 
// move back to past Monday 
$num = (date("w", $date->getTimestamp())) - 1; 
$offset = new DateInterval("P{$num}D"); 
$offset->invert = 1; 
// move forward two weeks 
$interval = new DateInterval('P2W'); 
$next_second_monday = $date->add($offset)->add($interval); 

И $next_second_monday будет:

DateTime Object 
(
    [date] => 2017-02-27 13:03:00.000000 
    [timezone_type] => 3 
    [timezone] => UTC 
)