【问题标题】:When a date is given how to get the date of Monday of that week in php [duplicate]给出日期时如何在php中获取该周的星期一的日期[重复]
【发布时间】:2012-08-02 13:11:37
【问题描述】:

可能重复:
Get first day of week in PHP?

当给定日期时,我应该得到该周星期一的日期。

当给出 2012-08-08 时,它应该返回 2012-08-06。

【问题讨论】:

  • 尝试date('w') 获取给定日期是星期几 - 星期一是第 1 天。之后就是数学。
  • 同意复制,但我更喜欢我的方式:p

标签: php datetime date


【解决方案1】:
function last_monday($date) {
    if (!is_numeric($date))
        $date = strtotime($date);
    if (date('w', $date) == 1)
        return $date;
    else
        return strtotime(
            'last monday',
             $date
        );
}

echo date('m/d/y', last_monday('8/14/2012')); // 8/13/2012 (tuesday gives us the previous monday)
echo date('m/d/y', last_monday('8/13/2012')); // 8/13/2012 (monday throws back that day)
echo date('m/d/y', last_monday('8/12/2012')); // 8/06/2012 (sunday goes to previous week)

试试看:http://codepad.org/rDAI4Scr

... 或具有星期天的变体返回第二天(星期一)而不是前一周,只需添加一行:

 elseif (date('w', $date) == 0)
    return strtotime(
        'next monday',
         $date
    );

试试看:http://codepad.org/S2NhrU2Z

你可以传递一个时间戳或者一个字符串,你会得到一个时间戳

文档

【讨论】:

    【解决方案2】:

    您可以使用 strtotime 函数轻松创建时间戳 - 它接受“上周一”之类的短语以及辅助参数,您可以使用 mktime 轻松创建时间戳(请注意,特定日期的输入是Hour,Minute,Second,Month,Day,Year)。

    <?php
        $monday=strtotime("monday this week", mktime(0,0,0, 8, 8, 2012));
        echo date("Y-m-d",$monday);
        // Output: 2012-08-06
    ?>
    

    Editstrtotime 中的“上周一”更改为“本周周一”,现在可以完美运行了。

    【讨论】:

    • 如果输入的日期是2012-08-06这个就不行了。
    • @irrelephant 现在可以了 :) 鹰眼 +1 顺便说一句 :)
    • 输出为“2012-08-13”codepad.org/mCOrBDL3
    • @Chris 很有趣,在我的笔记本电脑上工作正常(PHP5.3.0)
    • @Fluffeh 甚至更奇怪......我在自己的服务器上对其进行了测试,返回的是“2012-08-06”。很难责怪时区...我可以看到有问题的日期是否是星期天,但是星期三提前一周?你说得对……很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多