PHP-Date函数-查找前一周

PHP-Date函数-查找前一周,php,date,Php,Date,在我的应用程序中,一周的定义是从周一上午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月

在我的应用程序中,一周的定义是从周一上午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中实现这一点。 谢谢


你也许可以加上接下来的6天,你就有了。

你可以试着用时间戳来做,但是时区的改变会让事情变得一团糟(例如,CET->CEST)。我会使用这个类:


在。

中有一个用户函数。
strotime
函数在这里非常方便:

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

谢谢索普让我看看谢谢尼克-我以前没听说过这个功能。欣赏it@Gublooo,之前的代码有一个小错误:除非今天是星期一,否则它将在本周生效。现在它已经修好了。这正是我在回答中所说的“用时间戳试试”的代码类型。如果您居住在错误的国家,并且在错误的日期运行此程序,您将得到一个惊喜,因为第二个结果不是星期天的23:59:59,而是星期一的00:59:59。是DST。如果您必须使用时间戳,至少要确保您使用的是GMT。@Lukáš-我现在已经更改了代码,以便它能够适应DST的更改。此外,时间戳只是一个数字——自1970年1月1日格林尼治标准时间午夜以来的秒数。因此,时间戳本身没有时区。时间戳没有时区,但当您使用
date()
将其转换为日期/时间时,时间戳绑定到时区。不同的时区将提供不同的转换。要整理日班,您可以执行
(6+$weekday)%7
而不是
($weekday==0?6:$weekday-1)
$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 );