周日如何开始周?

时间:2013-04-17 09:56:39

标签: php datetime week-number

我需要在php中获取周数,其中周数应该从星期日算起。默认情况下它是星期一。请帮我找一个如何在星期日作为开始日获取周数的方法。

在php手册中     ISO-8601周的一周,星期一开始的星期(在PHP 4.1.0中添加)

但我需要获得一周的周数,周日从星期日开始。

感谢

9 个答案:

答案 0 :(得分:5)

试试这个:

$week = intval(date('W'));

if (date('w') == 0) {            // 0 = Sunday
   $week++;
}

echo $week;

不确定逻辑是否正确;

答案 1 :(得分:3)

扩展silkfire答案,并允许它包围数年

   if($date->format('w') == 0){
        if(date('W',strtotime($date->format('Y')."-12-31"))==52 and $date->format('W') == 52){
            $week = 1;
        }
        elseif(date('W',strtotime($date->format('Y')."-12-31"))==53 and $date->format('W') == 53){
            $week = 1;
        }
        else{
            $week++;
        }
    }

答案 2 :(得分:3)

2017年1月1日第一个解决方案不正确。 试试这个:

$ date =日期(' Y-m-d');
echo strftime("%U",strtotime($ date));

答案 3 :(得分:2)

试试这个。星期日必须-1天。

$date = "2015-05-25";
echo date("W", strtotime("-1 day",strtotime($date)));

答案 4 :(得分:1)

您应该尝试使用strftime

$week_start = new DateTime();
$week = strftime("%U");  //this gets you the week number starting Sunday
$week_start->setISODate(2012,$week,0); //return the first day of the week with offset 0
echo $week_start -> format('d-M-Y'); //and just prints with formatting 

答案 5 :(得分:0)

我知道这个主题已经过时了,但这是一个较短的方式来与elvis运营商和" +7天"表达式为strtotime():

$week=date("W",strtotime(date("w")==1?"+7 day":"+0 day"));

如果$ date(" w")返回true表示今天是星期二和星期日(1-6)之间的一天,那么,我们今天可以返回星期('今天')

如果返回false,则表示是星期一(0),因此,我们应该在第二天返回(' +1周')。

通过这种方式,我们不需要关心一年中的最后一天或第一天,或检查当前年份是52周还是53周。

编辑:之前的答案(以及本主题中的其他人)今年没有工作因为januray 1st是星期一,所以,它需要在1周前(-1周),不包括星期日(第6天)

date("W",strtotime(date("w")?'-7 day':'+0 day'));

我认为有一个条件询问januray 1st是星期一是否有效,但我还没有测试过,我稍后会回答

对于自定义日,您可以使用此:

$date = strtotime('2018-04-30'); // (it is monday)

if(date("w",strtotime(date('Y',$date).'-01-01'))==1){ // if first day of year is monday
    $week = strtotime(date('w',$date)?"-7 day":"+0 day",$date); // and today is sunday, sub a week
    $week = date("W",$week);
}else{ // if is not monday
    $week = strtotime(date('w',$date)==1?"+7 day":"+0 day",$date); // and today is monday, add a week
    $week = date("W",$week);
}

答案 6 :(得分:0)

以@ silkfire的回答为基础:

    $year = date('Y');
    $week_no = date('W');
    if (date('w') == 0) {            // 0 = Sunday
       $week_no++;
    }
    // We shifted the week but the week still starts on a Monday.
    $weekStartDate = new DateTime();
    $weekStartDate->setISODate($year,$week_no);
    // Shift start date to Sunday
    $weekStartDate->add(DateInterval::createFromDateString('-1 day')); 

答案 7 :(得分:0)

在php 5.6 Debian 7中进行了测试

function getWeekNumber(\DateTime $_date)
{
    $week = intval($_date->format('W'));

    if(intval($_date->format('w')) == 0) {
        $week = intval($_date->format('W')) == ( 52 + intval($_date->format('L')) ) ? 1 : $week + 1;
    }

    return $week;
}

答案 8 :(得分:0)

我这样解决了:

function getWeekOfYear( DateTime $date ) {

        $dayOfweek = intval( $date->format('w') );

        if( $dayOfweek == 0 ) {
            $date->add(new DateInterval('P1D'));
        } 

        $weekOfYear = intval( $date->format('W') );

        return $weekOfYear;
}