5

在我的申请中,一周的定义是从周一上午 12:00:00 到周日晚上 11:59:59

每当用户访问我的网站时 - 我需要找到前几周的日期范围并据此向他展示结果。这听起来很简单,但我迷路了。

给你场景 - - 3 月 1 日星期一上午 12:00:00 到 3 月 7 日星期日下午 12:59:59 是一周。

现在,当用户在 3 月 8 日或 3 月 10 日或 3 月 12 日访问该网站时 - 基于当前日期,我应该能够获得前一周的日期范围,即开始日期 3 月 1 日和结束日期 3 月 7 日。

但是如果用户在 3 月 16 日访问该网站 - 我需要的日期范围是 3 月 8 日到 3 月 15 日。

我怎样才能在 PHP 中做到这一点。谢谢

4

5 回答 5

8

您可以尝试使用时间戳来执行此操作,但这会因时区更改而变得混乱(例如,CET -> CEST)。我会使用这个DateTime类:

$d = new DateTime();
$weekday = $d->format('w');
$diff = 7 + ($weekday == 0 ? 6 : $weekday - 1); // Monday=0, Sunday=6
$d->modify("-$diff day");
echo $d->format('Y-m-d') . ' - ';
$d->modify('+6 day');
echo $d->format('Y-m-d');
于 2010-03-02T06:28:59.910 回答
8

strtotime功能在这里非常方便:

$mondayStr = "last monday";
if (date('N') !== '1') {  // it's not Monday today
    $mondayStr .= " last week";
}

$monday = strtotime($mondayStr);
echo date('r', $monday);    // Mon, 22 Feb 2010 00:00:00 +1000

$sunday = strtotime('next monday', $monday) - 1;
echo date('r', $sunday);    // Sun, 28 Feb 2010 23:59:59 +1000
于 2010-03-02T06:38:52.257 回答
1
function get_week_start($year, $month, $day)
{
    $timestamp = mktime(0, 0, 0, $month, $day, $year);
    return date('F j Y', $timestamp = mktime(0, 0, 0, $month, date('d', $timestamp)-date('w', $timestamp), $year));
}

您也许可以添加接下来的 6 天,然后就可以了。

于 2010-03-02T06:19:03.077 回答
1

PHP 文档中有一个用户函数。

于 2010-03-02T06:33:29.683 回答
0

格林威治标准时间版本

$prev_monday_t = time() - (gmdate('N') + 6) * 86400;
$prev_sunday_t = time() - gmdate('N') * 86400;

echo gmdate('Y-m-d H:i:s', $prev_monday_t ).' '.gmdate('Y-m-d H:i:s', $prev_sunday_t );

本地版本

$prev_monday_t = time() - (date('N') + 6) * 86400;
$prev_sunday_t = time() - date('N') * 86400;

echo date('Y-m-d H:i:s', $prev_monday_t ).' '.date('Y-m-d H:i:s', $prev_sunday_t );
于 2015-03-23T19:28:05.463 回答