代码之家  ›  专栏  ›  技术社区  ›  mmundiff

php日期/周问题

  •  1
  • mmundiff  · 技术社区  · 16 年前

    我在这里有点不知所措。似乎我的代码在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>';
    

    有人知道我做错了什么,或者可以告诉我一个简单的方法,提供一周的数字和一年,让我知道那一周的开始和结束日期,而不损失任何天数?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Jimmy Shelter    16 年前

    请点击此处: 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。

        2
  •  0
  •   AlexV    16 年前

    在5.2.7之前的PHP5中,请求 中给定工作日的给定事件 一个工作日最繁忙的月份 错误地将一周添加到 已在5.2.7及更高版本中更正。

    因此,您可以使用以下内容:

    strtotime('last Monday', $timestamp);
    
    推荐文章