上周,本周 (php)

发布于 2024-11-02 01:26:11 字数 212 浏览 9 评论 0原文

我正在做一些统计,我想选择(仅限上周)和本周的时间。

本周很简单:

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

上周

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

i am making some statistics, i want to select the time from (last week only) and this week.

for this week its easy:

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

for last week

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

橪书 2024-11-09 01:26:11

这?

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

编辑:将信用更改为@Dominic Barnes 的评论。

This?

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

Edit: change credit to @Dominic Barnes's comment.

魄砕の薆 2024-11-09 01:26:11

如果问题是用于统计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,则日期不正确。因此,至少出于统计目的,该解决方案是执行此操作的正确方法。

If the question is for statistical PHP script. Then all of the answers and basically the question is wrong.

  • Last week in statistics = One before currently running week from Sunday to Monday
  • This week in statistics = Currently running week from Sunday to Monday

(or Monday to Sunday, depending on which calendar you are used to, but in PHP that's one week)

This means, its not from today minus 7 days. That is not last or this week. So the selected answer currently, is in correct and counts 7 days back. Granted, its Sunday, at the time of testing, so it shows correct. But by editing the now date, you can see the problem:

// 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

You have to set the start of the week and the end of the week. strtotime() can support more stuff, so you can most likely make this answer better and more neat. However you get the working code and a good example of the logic from...

My proposed solution:

$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 />';

Above currently produces:

30.08.2015 00:00:00 - Today for example purposes
24.08.2015 00:00:00 - 30.08.2015 23:59:59 - Currently running week period
17.08.2015 00:00:00 - 23.08.2015 23:59:59 - Last week period

Because for statistics, it has to be accurate and if the end would be 00:00:00, then that date wont be counted in. And if the date would be one day later at 00:00:00, then the date is not correct. There for, this solution is the correct way to do this, for statistical purposes at least.

Smile简单爱 2024-11-09 01:26:11

这就是你想要的吗?

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

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

Is that what you want?

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

Dominic also points out that time() === strtotime('this week') (CodePad).

沧笙踏歌 2024-11-09 01:26:11

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

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

“本周”很重要,否则,如果本周星期一已经过去(例如,如果已经是星期二),它将为您提供下周的星期一。

至于月份/年份,我使用了经典的 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'));

If searching for the last week for statistical purposes, starting on Monday, ending on Sunday:

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

"this week" is important, otherwise, if this weeks monday is already in the past (e.g. if it is tuesday already), it will give you the monday of next' week.

As for the months/years, I used the classy mktime approach:

last month

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

last year

$last_year_start = mktime(0, 0, 0, 1, 1, date('Y')-1);
$last_year_end   = mktime(23, 59, 59, 1, 0, date('Y'));
烟花肆意 2024-11-09 01:26:11

如果您正在寻找“上周”而不是过去 7 天

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

If you are looking for "Last Week" instead of Last 7 days

$start = strtotime('Last Week'); // Will give you last Monday
$finish = strtotime('Last Sunday'); // Will give you last Sunday
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文