2017-02-15 90 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-> modify('+ 7 day'); ? –

回答

1

DateTime对象的modify方法采用相同类型的参数是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()做,但如果你认为它太昂贵,你也可以使用dateDateInterval

$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 
) 
相关问题