简体   繁体   English

在PHP中的年份和星期

[英]Year and week to date in php

I have two pieces of information extracted from a MySQL database, the year (2009, 2010, ect) and the week (1-52). 我从MySQL数据库中提取了两条信息,即年份 (2009年,2010年,等)和 (1-52)。 And I need to convert it in to a date start and date end.. 我需要将其转换为日期开始和日期结束..

For example: 例如:

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)

How would I go about doing that in php ? 我将如何在PHP中执行此操作?

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

If week number is under 10 then append a 0 before number. 如果周数小于10,则在数字前附加0。 1 won't work, it should be 01. 1将无法正常工作,应为01。

Since this question and the accepted answer were posted the DateTime classes make this much simpler to do:- 由于发布了这个问题和接受的答案, 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));

Output:- 输出: -

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)

This has the added advantage of taking care of leap years etc.. 这具有照顾闰年等的额外优势。

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;
}

Try this out: 试试这个:

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

You need to set $year and $week. 你需要设置$ year和$ week。 It will then print the interval as specified. 然后它将按指定打印间隔。

For instance, the output as-is is: 例如,输出原样是:

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

Note that weeks are indexed from 0-51 (easy to fix). 请注意,周数从0-51索引(易于修复)。

It's kind of ugly, but it works. 这有点难看,但它确实有效。 Hope that helps! 希望有所帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM