PHP - 日期功能 - 查找前一周

时间:2010-03-02 06:12:43

标签: php date

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

每当用户访问我的网站时,我都需要查找前几周的日期范围,并根据该结果显示结果。这听起来很简单,但我迷路了。

为您提供方案 - - 3月1日星期一12:00:00至3月7日星期日12:59:59 PM是一周。

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

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

我如何在PHP中执行此操作。 感谢

5 个答案:

答案 0 :(得分: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');

答案 1 :(得分: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

答案 2 :(得分: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天,然后就可以了。

答案 3 :(得分:1)

PHP Documentation中有一个用户功能。

答案 4 :(得分:0)

GMT版

$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 );