开发者

last week, this week (php)

i am makin开发者_StackOverflowg 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 = ??????


This?

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

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


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.


Is that what you want?

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

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


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


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜