代码之家  ›  专栏  ›  技术社区  ›  Steven Smethurst

php中的年初至今

  •  17
  • Steven Smethurst  · 技术社区  · 16 年前

    我从MySQL数据库中提取了两条信息 (2009年、2010年等)和 (1-52). 我需要把它转换成日期开始和日期结束。。

    Year=2010, Week=1 would be (Friday, Jan 1st, 2010) - (Sunday, Jan 3rd, 2010)
    Year=2010, Week=33 would be (Monday, Aug 16th, 2010) - (Sunday, Aug 22nd, 2010)
    Year=2010, Week=34 would be (Monday, Aug 23rd, 2010) - (Sunday, Aug 29th, 2010)
    

    我该怎么用php来做呢?

    4 回复  |  直到 16 年前
        1
  •  39
  •   Naveed    16 年前
    $year = "2010"; // Year 2010
    $week = "01"; // Week 1
    
    $date1 = date( "l, M jS, Y", strtotime($year."W".$week."1") ); // First day of week
    $date2 = date( "l, M jS, Y", strtotime($year."W".$week."7") ); // Last day of week
    echo $date1 . " - " . $date2;
    

        2
  •  10
  •   vascowhite    9 年前

    DateTime

    function daysInWeek($weekNum)
    {
        $result = array();
        $datetime = new DateTime();
        $datetime->setISODate((int)$datetime->format('o'), $weekNum, 1);
        $interval = new DateInterval('P1D');
        $week = new DatePeriod($datetime, $interval, 6);
    
        foreach($week as $day){
            $result[] = $day->format('d/m/Y');
        }
        return $result;
    }
    
    var_dump(daysInWeek(24));
    

    array (size=7)
      0 => string '10/06/2013' (length=10)
      1 => string '11/06/2013' (length=10)
      2 => string '12/06/2013' (length=10)
      3 => string '13/06/2013' (length=10)
      4 => string '14/06/2013' (length=10)
      5 => string '15/06/2013' (length=10)
      6 => string '16/06/2013' (length=10)
    

    这有一个额外的优势,即照顾闰年等。。

        3
  •  2
  •   Siva Raparla    13 年前
    function getStartAndEndDate($week, $year) 
    {
        //setting the default time zone
        date_default_timezone_set('America/New_York');
    
        //getting the
        //$firstWeek = date('W',strtotime("January 1 $year", date(time())));
        //echo "Year : ".$year."<br/>"."Week : ".$week."<br/>";
        $firstWeekThursDay = date('W',strtotime("January $year first thursday",date(time())));
    
        if($firstWeekThursDay == "01")
        {
            $time      = strtotime("January $year first thursday",date(time()));
            //echo $time."<br/>";
            //echo date('Y-m-d H:i:s',$time)."<br/>";
            $time      = ($time-(4*24*3600))+(((7*$week)-6)*24*3600);
            //echo $time."<br/>";
            //echo date('Y-m-d H:i:s',$time)."<br/>";
            $return[0] = date('Y-m-d', $time);
            $time += 6*24*3600;
            $return[1] = date('Y-m-d', $time);
            //print_r($return);
        }
        else 
        {
            $time = strtotime("January 1 $year", time());
            //echo "<br/>".$time."<br/>";
            //echo date('Y-m-d H:i:s',$time)."<br/>";
            $time      = ($time-(4*24*3600))+(((7*$week)-6)*24*3600);
            //echo $time."<br/>";
            //echo date('Y-m-d H:i:s',$time)."<br/>";
            $return[0] = date('Y-m-d', $time);
            $time     += 6*24*3600;
            $return[1] = date('Y-m-d', $time);
            //print_r($return);
            //echo "<br/>End of Hi<br/>";
    
        }
        return $return;
    }
    
        4
  •  0
  •   hb2pencil    16 年前

    试试这个:

    $year = 2000;
    $week = 1;
    $start = date("l, M jS, Y", strtotime("01 Jan ".$year." 00:00:00 GMT + ".$week." weeks"));
    $end = date("l, M jS, Y", strtotime($start." + 1 week"));
    echo $start." to ".$end;
    

    您需要设置$year和$week。然后它将按指定打印间隔。

    例如,输出为:

    Friday, Jan 7th, 2000 to Friday, Jan 14th, 2000
    

    请注意,周的索引从0到51(易于修复)。

    虽然有点难看,但还是管用的。希望有帮助!

    推荐文章