php strtotime“last monday”如果今天是星期一?

时间:2010-11-11 00:31:31

标签: php datetime strtotime

我想使用strtotime("last Monday")

问题是,如果今天是星期一,那又回归了什么? 它似乎正在返回上周一的星期日。在这种情况下,如何让它返回今天的日期?

7 个答案:

答案 0 :(得分:121)

如果您阅读本手册,可以使用一个很好的示例来准确描述您的目标http://www.php.net/manual/en/datetime.formats.relative.php

strtotime('Monday this week');

更新:似乎在较新版本的PHP中引入了错误,其中this week在星期日运行时返回错误的一周。您可以在此处对错误进行投票:https://bugs.php.net/bug.php?id=63740

更新2:截至2016年5月18日,这已在PHP 5.6.22,PHP 7.0.7和PHP 7.1-dev中修复(并且希望在后续版本中保持固定),如此处所示:https://bugs.php.net/bug.php?id=63740#1463570467

答案 1 :(得分:69)

  

在这种情况下,如何让它返回今天的日期?

伪代码:

if (today == monday)
    return today;
else
    return strtotime(...);
不过,这个技巧也可行:

strtotime('last monday', strtotime('tomorrow'));

答案 2 :(得分:4)

如果今天是星期一,则strtotime(“上周一”)将返回过去7天的日期。你为什么不检查今天是否是星期一,如果是,请返回今天的日期,如果没有,请回到上周?

这样做是一种万无一失的方式。

if (date('N', time()) == 1) return date('Y-m-d');
else return date('Y-m-d', strtotime('last Monday'));

http://us2.php.net/manual/en/function.date.php

答案 3 :(得分:1)

正如previous answer中正确概述的那样,这个技巧有效,但在PHP 5.6.22PHP 7.0.7PHP 7.1-dev之前也有caveats

strtotime('last monday', strtotime('tomorrow'));

// or this one, which is shorter, but was buggy:
strtotime('Monday this week');

对于那些喜欢“Jedy-way”的人来说,使用the DateTime class的对象,接下来是解决方案:

(new \DateTime())->modify('tomorrow')->modify('previous monday')->format('Y-m-d');

甚至更短的符号:

\DateTime('Monday this week')

要小心,因为如果你在SQL上做同样的事情,你不需要在添加任何这些技巧,并添加“明天”。以下是解决方案的外观:

SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) as last_monday;

答案 4 :(得分:0)

根据您使用它的确切内容,这可能很有用。由于一秒的模糊性可以满足我的要求,我使用:

date( 'Y-m-d 23:59:59', strtotime( 'last sunday' ))

在最近一个星期一(或今天是星期一)的午夜时分到达午夜。

答案 5 :(得分:0)

我的方法:

date_default_timezone_set('Europe/Berlin');
function givedate($weekday, $time) {
$now = time();
$last = strtotime("$weekday this week $time");
$next = strtotime("next $weekday $time");
    if($now > $last) {
        $date = date("d.m.Y - H:i",$next);
    }
    else {
        $date = date("d.m.Y - H:i",$last);
    }
    return $date;
}

echo givedate('Wednesday', '00:52');

或每月

    function givedate_monthly($weekday, $time) {
    $now = time();
    $last = strtotime("first $weekday of this month $time");
    $next = strtotime("first $weekday of next month $time");
        if($now > $last) {
            $date = date("d.m.Y - H:i",$next);
        }
        else {
            $date = date("d.m.Y - H:i",$last);
        }
        return $date;
}

echo givedate_monthly('Wednesday', '01:50');

答案 6 :(得分:-1)

$monday = strtotime('Monday last week');
$sunday = strtotime('+6 days', $monday);