php tarih / hafta sorun

1 Cevap php

Burada tür bir kayıp değilim. Nasılsa benim kod 2009 sonunda bir hafta eksik sanki ve ben bir kaç farklı şeyler denedim.

Bir hafta için başlangıç ​​ve bitiş tarihini almak için benim baz fonksiyonu altındadır. Yılda Verilen, Hafta ve Haftanın Günü size bir tarih veriyor.

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

Ben 2 Ocak 2010 ile 27 Aralık 2009 arasında hafta eksik olduğunu fark kadar tamamen iyi çalışmak gibiydi.

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

Bu yıl 52. hafta 2009-12-26 sona eriyor ve yeni yıl 1 hafta 2010-01-03 başlar gibi görünüyor. Ben, bir hafta yok Bueno kaybediyorum!

Herkes yanlış ne yapıyorum biliyor ya sürecinde herhangi bir gün kaybetmeden bana bu haftanın başlangıç ​​ve bitiş tarihini almak için bir hafta numarası ve bir yıl temin bir aptal geçirmez şekilde beni işaret edebilir?

1 Cevap

Sizin soru Ben php.net bugün okunan bir hata yorumun beni remainded:

In PHP 5 prior to 5.2.7, requesting a given occurrence of a given weekday in a month where that weekday was the first day of the month would incorrectly add one week to the returned timestamp. This has been corrected in 5.2.7 and later versions.

Şimdilik irrevelent ama ben strtotime çağrıları ile datefromweeknr içinde hesaplamalar yerine size öneririm Hangi. Ben strtotime senin hesaplama hatayı düzeltmek olacaktır eminim.

Böylece gibi bir şey kullanabilirsiniz:

strtotime('last Monday', $timestamp);