首页 文章

以PHP5中的数组返回当前日历周的日期

提问于
浏览
1

我如何组合一个PHP5函数,它将找到当前日历周并将星期几中每天的日期作为数组返回,从星期一开始?例如,如果函数今天运行(2010年2月25日星期四),函数将返回一个数组,如:

[0] => Mon Feb 22 2010
[1] => Tue Feb 23 2010
[2] => Wed Feb 24 2010
[3] => Thu Feb 25 2010
[4] => Fri Feb 26 2010
[5] => Sat Feb 27 2010
[6] => Sun Feb 28 2010

日期存储在数组中的格式并不重要,因为我认为这很容易改变 . 此外,可以选择提供日期作为参数并获取该日期的日历周而不是当前的日历周 .

谢谢!

2 回答

  • 3

    我想一个解决方案是首先使用strtotime获取与上一个星期一相对应的时间戳:

    $timestampFirstDay = strtotime('last monday');
    

    但是如果你今天(星期四)尝试使用这样的东西:

    $timestampFirstDay = strtotime('last thursday');
    var_dump(date('Y-m-d', $timestampFirstDay));
    

    你会得到 :

    string '2010-02-18' (length=10)
    

    即上周...对于strtotime,"last"表示"the one before today" .

    这意味着你必须测试今天是 strtotimestrtotime 返回一周 - 如果是这样,加上一周...

    这是一个可能的(可能是更聪明的想法)解决方案:

    $timestampFirstDay = strtotime('last monday');
    if (date('Y-m-d', $timestampFirstDay) == date('Y-m-d', time() - 7*24*3600)) {
        // we are that day... => add one week
        $timestampFirstDay += 7 * 24 * 3600;
    }
    

    现在我们有"last monday"的时间戳,我们可以写一个简单的 for 循环,循环7次,每次增加1天,如下所示:

    $currentDay = $timestampFirstDay;
    for ($i = 0 ; $i < 7 ; $i++) {
        echo date('Y-m-d', $currentDay) . '
    '; $currentDay += 24 * 3600; }

    这将给我们这种输出:

    2010-02-22
    2010-02-23
    2010-02-24
    2010-02-25
    2010-02-26
    2010-02-27
    2010-02-28
    

    现在,由您决定:

    • 修改 for 循环,使其将日期存储在数组中

    • 确定要用于date函数的格式

    玩得开心 ;-)

  • 1

    承租人 . . 首先,为了避免任何时区问题,我要在你想要比较的那天与中午挂钩,所以一小时的任何一种方式都不会造成任何问题 .

    $dateCompare = time(); // replace with a parameter
    $dateCompare = mktime(12, 0, 0, date('n', $dateCompare), 
          date('j', $dateCompare), date('Y', $dateCompare));
    

    然后找到您日期的星期几 .

    $dow = date('N', $dateCompare);
    

    1是星期一,所以弄清楚从星期一起我们有多少天 .

    $days = $dow - 1;
    

    现在减去几天的秒数直到你回到星期一 .

    $dateCompare -= (3600 * 24 * $days);
    

    现在组装你的日子 .

    $output = array();
    for ($x = 0; $x < 7; $x++) {
        $output[$x] = $dateCompare + ($x * 24 * 3600);
    }
    

    这是一个时间戳数组,但如果您愿意,可以将日期存储为字符串 .

相关问题