2014-02-08 69 views
16

我怎样才能得到上周的日期范围在PHP?我怎样才能得到上周的日期范围在PHP?

看到我的代码波纹管:

<?php 
    function get_last_week_dates(){ 
     // how can i get the date range last week ? 
     // ex: today is 2014-2-8 
     // the week date range of last week should be '2014-1-26 ~ 2014-2-1' 
    } 
?> 
+2

哪里是你的代码?只是功能definintion,大声笑。 –

+0

Duplicate post http://stackoverflow.com/questions/10798228/php-date-function-seven-days-previous –

+0

http://stackoverflow.com/questions/5552862/finding-date-range-for-current-week - 月和年 – arma

回答

59

您可以使用strtotime()

$previous_week = strtotime("-1 week +1 day"); 

$start_week = strtotime("last sunday midnight",$previous_week); 
$end_week = strtotime("next saturday",$start_week); 

$start_week = date("Y-m-d",$start_week); 
$end_week = date("Y-m-d",$end_week); 

echo $start_week.' '.$end_week ; 

UPDATE

改变了代码来处理星期天。如果当天是星期日,那么 - 一周将在前一个星期日再次获得前一个星期日,这将在一周后返回。

$previous_week = strtotime("-1 week +1 day"); 

另外,如果我们需要找到current weeknext week日期 范围,我们可以做

当前周 -

$d = strtotime("today"); 
$start_week = strtotime("last sunday midnight",$d); 
$end_week = strtotime("next saturday",$d); 
$start = date("Y-m-d",$start_week); 
$end = date("Y-m-d",$end_week); 

下周 -

$d = strtotime("+1 week -1 day"); 
$start_week = strtotime("last sunday midnight",$d); 
$end_week = strtotime("next saturday",$d); 
$start = date("Y-m-d",$start_week); 
$end = date("Y-m-d",$end_week); 
+0

你为什么要加'+1天'? – Sisir

+2

说今天是'星期日',所以如果你做了'-1周',那么它就变成了'上周日',所以如果你'上周日午夜',那么它会回到另一个'上周日',所以加上'+1那么如果今天是星期日,我会得到'星期一',那么如果我在'星期日午夜'开始,那么我将确切地有从上周星期日到下星期六的开始日期。 –

+0

当你运行时问题仍然存在这个代码在星期六。 –

0

你可以做到这样。

首先获取当前时间戳并减去所需天数。

$curTime = time(); 
echo date("Y-m-d",$curTime); 
echo "<br />"; 
echo date("Y-m-d",($curTime-(60*60*24*7))); 
+0

这可能并不总是有效:以这种方式计算差异可能会在DST开始或结束时出现意外情况。 – Qualcuno

2

你需要使用strtotime功能这个

<center> 
<?php 
function get_last_week_dates() 
{ 
     // how can i get the date range last week ? 
     // ex: today is 2014-2-8 
     // the week date range of last week should be '2014-1-26 ~ 2014-2-1' 

     $startdate = "last monday"; 
     if (date('N') !== '1') 
     { 
      // it's not Monday today 
      $startdate .= " last week"; 
     } 
     echo "<br />"; 
     $day = strtotime($startdate); 
     echo date('r', $day); 
     echo "<br />"; 
     $sunday = strtotime('next monday', $day) - 1; 
     echo date('r', $sunday); 
    } 
    get_last_week_dates(); 
?> 
</center> 
2

嘛,只是为了试图解决这个乐趣:

date_default_timezone_set('UTC'); 
$firstDayOfLastWeek = mktime(0,0,0,date("m"),date("d")-date("w")-7); 
$lastDayOfLastWeek = mktime(0,0,0,date("m"),date("d")-date("w")-1); 
echo("Last week began on: ".date("d.m.Y",$firstDayOfLastWeek)); 
echo("<br>"); 
echo("Last week ended on: ".date("d.m.Y",$lastDayOfLastWeek)); 
1

这应该做的伎俩

$startWeek = date('Y-m-d',strtotime("Sunday Last Week")); 
$endWeek = date('Y-m-d',strtotime("Sunday This Week")); 

这一点,如果跑又不行是星期一。它会在上个星期日(前一天)到下一个星期日。因此,使用Abhik Chakraborty的的方法与上面:

$startTime = strtotime("last sunday midnight",$previous_week); 
$endTime = strtotime("next sunday midnight",$startTime); 
$startDate = date('Y-m-d 00:00:00',$startTime); 
$endDate = date('Y-m-d 23:59:59',$endTime); 

现在,这将给

start = 2014-08-10 00:00:00 
endDate = 2014-08-17 23:59:59 
12

只需使用

date("m/d/Y", strtotime("last week monday")); 
date("m/d/Y", strtotime("last week sunday")); 

它会给上周的周一和周日的日期。

+2

我觉得这个答案是最整齐,最简单的。然而,它目前为-1。 –

0
$lastWeekStartTime = strtotime("last sunday",strtotime("-1 week")); 
$lastWeekEndTime = strtotime("this sunday",strtotime("-1 week")); 
$lastWeekStart = date("Y-m-d",$lastWeekStartTime); 
$lastWeekEnd = date("Y-m-d",$lastWeekEndTime); 
0

为了找到最后一周的开始日期和结束日期,您可以按照此代码进行操作。

它适用于所有间隔以查找日期间隔。

$Current = Date('N'); 
$DaysToSunday = 7 - $Current; 
$DaysFromMonday = $Current - 1; 
$Sunday = Date('d/m/y', strtotime("+ {$DaysToSunday} Days")); 
$Monday = Date('d/m/y', strtotime("- {$DaysFromMonday} Days")); 

如果是这样你需要改变它与datatime()你可以执行此功能。

$date = new DateTime(); 
$weekday = $date->format('w'); 
$diff = 7 + ($weekday == 0 ? 6 : $weekday - 1); // Monday=0, Sunday=6 
$date->modify("-$diff day"); 
echo $date->format('Y-m-d') . ' - '; 
$date->modify('+6 day'); 
echo $date->format('Y-m-d'); 

使用功能:

如果你想找到的最后一个星期范围内,你可以瓶坯喜欢这个功能的帮助。

功能:

// returns last week's range 
function last_week_range($date) { 
$ts = strtotime("$date - 7 days"); 
$start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts); 
return array(
     date('Y-m-d', $start), 
     date('Y-m-d', strtotime('next saturday', $start)) 
); 
} 

用法:

$today=date(); 
print_r(last_week_range($today)); 

所有已给出。将不考虑返回星期的开始日的上周范围的上述功能..

0

我知道这是旧的,但这是一个更简洁的方法:

$startDate = date("m/d/y", strtotime(date("w") ? "2 sundays ago" : "last sunday")); 
$endDate = date("m/d/y", strtotime("last saturday")); 
echo $startDate . " - " . $endDate 
0

这人会产生正确的结果和处理问题,周一

<?php 
$monday = strtotime("last monday"); 
$monday = date('W', $monday)==date('W') ? $monday-7*86400 : $monday; 

$sunday = strtotime(date("Y-m-d",$monday)." +6 days"); 
$this_week_sd = date("Y-m-d",$monday); 
$this_week_ed = date("Y-m-d",$sunday); 

echo "Last week range from $this_week_sd to $this_week_ed "; 
?> 
相关问题