0

我一直在将每周视图日历放在一起,让用户使用表单上的按钮向后或向前移动一周。一切都很好,除了日历第一次打开它时,如果是本周的开始,那就是当天,所以剩下的日子都出来了。

这是我到目前为止所拥有的...

if(isset($_POST['add_week'])){
     $last_week_ts = strtotime($_POST['last_week']);
     $display_week_ts = $last_week_ts + (3600 * 24 * 7);
} else if (isset($_POST['back_week'])) {
     $last_week_ts = strtotime($_POST['last_week']);
     $display_week_ts = $last_week_ts - (3600 * 24 * 7);
} else {
    $display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24;
}

$week_start = date('d-m-Y', $display_week_ts);

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

我知道问题是什么,线路

$display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24;

它调用当天,但 $week_start 需要是一周的第一天,但​​我已经尝试了我能找到的一切。我试过了

$display_week_ts = strtotime("Monday noon");

这似乎运作良好,直到日记到达 10 月 29 日星期一,此时它似乎跳过了一天,并将 10 月 29 日改为星期二。

我在这个网站上找到了本周开始的另一个主题,但我无法成功实施其中的任何一个

我将非常感谢您在这件事上的任何帮助,我已经为此工作了三天......

4

1 回答 1

0

试试这个:

$display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24; 
$dow = date("w", $display_week_ts);
$dow = ($dow + 6) % 7;
$display_week_ts -= $dow * 3600 * 24;

$monday = new DateTime(date("Y-m-d", $display_week_ts));

现在$monday包含本周星期一的日期。将此对象存储在会话中。当你需要移动到下周时,找到下周一

$monday->modify('+1 week');

要查找前一个星期一,请使用

$monday->modify('-1 week');

找到新的星期一后,将其存储回会话中。

于 2012-09-05T09:53:51.100 回答