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

时间:2010-02-25 19:24:38

标签: php date calendar

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

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

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

谢谢!

2 个答案:

答案 0 :(得分: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”表示“今天之前的那个”

这意味着你必须测试今天“last monday”strtotime加上一周后返回 - 如果是这样的话,加上一周... < / p>

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

$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) . '<br />';
    $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 :(得分: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);
}

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