php日期/星期问题

时间:2010-01-04 21:47:03

标签: php date

我在这里有点不知所措。好像我的代码在某种程度上错过了整整一周在2009年底,我尝试了几个不同的东西。

我的基本功能是获取一周的开始和结束日期。给定一周,每周和每周的日期,它会给你一个约会。

function datefromweeknr($aYear, $aWeek, $aDay)
    {
        $Days=array('xx','ma','di','wo','do','vr','za','zo');
        //xx = Current Sun, ma = Mon ..... zo = Sun of the next Week
        $DayOfWeek=array_search($aDay,$Days); //get day of week (1=Monday)
        $DayOfWeekRef = date("w", mktime (0,0,0,1,4,$aYear)); //get day of week of January 4 (always week 1)
        if ($DayOfWeekRef==0){
            $DayOfWeekRef=7;
        }
        $ResultDate=mktime(0,0,0,1,4,$aYear)+((($aWeek-1)*7+($DayOfWeek-$DayOfWeekRef))*86400);
        return $ResultDate;
    }

在我意识到自己错过了2009年12月27日至2010年1月2日这一周之前,似乎工作得很好。

echo '<table border="1">';
for($i = 1; $i < 53; $i++){
    if($i < 10){
        $w = '0'.$i.'1';
    }
    else{
        $w = $i.'1';
    }
    echo '<tr><td>Week#'.$i.' </td><td> '.date("Y-m-d",datefromweeknr(2009,$i,"xx")).' </td><td> '.date("Y-m-d",datefromweeknr(2009, $i,"za")).'</td><td> Week = '.date("W: Y-m-d",strtotime("2009W$w")).'  </td></tr>';

}

echo '</table>';

似乎今年第52周以2009-12-26结束,新年第1周从2010-01-03开始。我失去了整整一个星期,没有布埃诺!

任何人都知道我做错了什么,或者可以指出我提供一周和一年的简单方法来获取一周的开始和结束日期,而不会在此过程中丢失任何日子?

2 个答案:

答案 0 :(得分:0)

点击此处: http://www.onlineconversion.com/day_week_number.htm 如果您在2009年12月29日进入,那么请参阅美国和ISO /欧洲给出不同的周数(分别为52和53)。 这可能与你的问题有关吗?你的日期符合哪个标准呢?

编辑: 来自http://www.epochconverter.com/epoch/weeknumbers.php: 根据ISO-8601标准的周数,周一开始的周数。一年中的第一周是包含该年第一个星期四的那一周。一年中最高的一周数是52或53。

答案 1 :(得分:0)

我的问题仍然是我今天在php.net上看到的错误评论:

  

在5.2.7之前的PHP 5中,请求a   在给定的工作日发生   那个工作日的一个月   这个月的第一天会   错误地添加一周到   返回时间戳。这一直是   在5.2.7及更高版本中更正。

现在这是不完整的,但我建议你用datertweime调用datefromweeknr替换你的计算。我很确定strtotime会修复你的计算错误。

所以你可以使用类似的东西:

strtotime('last Monday', $timestamp);