上周,本周(php)

时间:2011-04-19 00:19:56

标签: php date strtotime

我正在制作一些统计数据,我想从(仅限上周)和本周选择时间。

本周很容易:

$start = strtotime('this week');
$finish = time();

上周

$start = strtotime('last week');
$finish = ??????

5 个答案:

答案 0 :(得分:13)

此?

$start = strtotime('2 weeks ago');
$finish = strtotime('last week');

修改:将信用转换为@Dominic Barnes的评论。

答案 1 :(得分:5)

如果问题是针对统计PHP脚本的话。然后所有答案和基本上问题都是错误的。

  • 上周 统计数据 =从星期日到星期一当前正常运行的一周
  • 本周 统计 =当前正在从周日到周一运行一周

(或周一至周日,取决于您习惯使用的日历,但在PHP中为一周)

这意味着,它不是从今天减去7天。那不是最后一周或本周。因此,目前所选择的答案是正确的,并在7天前计算。在测试时,它的星期天,所以它显示正确。但是通过编辑现在的日期,您可以看到问题:

// Selected answer:
$start = strtotime('2 weeks ago');
$finish = strtotime('last week');

// But if today isn't Sunday, you can see the code is wrong:
echo date("d.m.Y", strtotime("1 week ago", strtotime('yesterday')));
// Output: 15.08.2015 00:00:00 - 17.08.2015 00:00:00

您必须设置一周的开始和一周的结束。 strtotime()可以支持更多内容,因此您最有可能使这个答案更好,更整洁。但是,您可以从...获得工作代码和逻辑的一个很好的例子。

我建议的解决方案:

$today = strtotime('today 00:00:00');

$this_week_start = strtotime('-1 week monday 00:00:00');
$this_week_end = strtotime('sunday 23:59:59');

$last_week_start = strtotime('-2 week monday 00:00:00');
$last_week_end = strtotime('-1 week sunday 23:59:59');

echo date('d.m.Y H:i:s', $today) . ' - Today for example purposes<br />';
echo date('d.m.Y H:i:s', $this_week_start) . ' - ' . date('d.m.Y H:i:s', $this_week_end) . ' - Currently running week period<br />';
echo date('d.m.Y H:i:s', $last_week_start) . ' - ' . date('d.m.Y H:i:s', $last_week_end) . ' - Last week period<br />';

以上目前产生:

  

30.08.2015 00:00:00 - 今天例如目的
  24.08.2015 00:00:00 - 30.08.2015 23:59:59 - 目前正在运行一周时间
  17.08.2015 00:00:00 - 23.08.2015 23:59:59 - 上周期间

因为对于统计数据,它必须是准确的,如果结束时间是00:00:00,那么该日期将不计入。如果日期是一天后的00:00:00,那么日期不正确。为此,这个解决方案是正确的方法,至少为了统计目的。

答案 2 :(得分:2)

这就是你想要的吗?

$start = strtotime('last week');
$finish = strtotime('this week');

Dominic还指出time() === strtotime('this week')CodePad)。

答案 3 :(得分:1)

如果出于统计目的搜索上周,从星期一开始,到星期日结束:

$last_week_start = strtotime("monday last week");
$last_week_end   = strtotime("monday this week - 1 second");

&#34;本周&#34;很重要,否则,如果这个星期一星期一已经过去(例如,如果已经是星期二),它会给你下一个星期一的星期一&#39;周。

至于月/年,我使用了优雅的mktime方法:

上个月

$last_month_start = mktime(0, 0, 0, date('m')-1, 01);
$last_month_end   = mktime(23, 59, 59, date('m'), 0);

去年

$last_year_start = mktime(0, 0, 0, 1, 1, date('Y')-1);
$last_year_end   = mktime(23, 59, 59, 1, 0, date('Y'));

答案 4 :(得分:-1)

如果您正在寻找&#34;上周&#34;而不是过去7天

$start = strtotime('Last Week'); // Will give you last Monday
$finish = strtotime('Last Sunday'); // Will give you last Sunday