Как по номеру недели в году вычислить месяц, к которому она относится?

Asar
На сайте с 23.08.2004
Offline
322
4216

Как грится, собственно, сабж... РНР...

Asar
На сайте с 23.08.2004
Offline
322
#1

Кстати, обратный вариант тоже актуален — вычислить для месяца недели (номера), которые в него входят...

Shtogrin
На сайте с 02.11.2006
Offline
95
#2

/**

* Get the date for monday for a given week and year
*
* @param integer $year 4-digit year corresponding to the ISO week number
* @param integer $week ISO 8601:1988 week number, range 01 to 53
*
* @return integer unix timestamp for monday 0:00 h for the given week
*/

function MondayOfWeek($year, $week)
{
$Jan1 = gmmktime(0,0,0,1,1,$year);

// if January 1st is in week 01, add the "missing weeks" ($week - 1), else ...
$weeks_to_add = (gmstrftime('%V', $Jan1) == 1) ? $week - 1 : $week;

$unix_timestamp = strtotime("$year-01-01 UTC + $weeks_to_add weeks last monday");

return $unix_timestamp;
}

Получите timestamp понедельника. А дальше date('m') определяете в какой/какие месяцы входит неделя.

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
[Удален]
#3

Неделя может относиться сразу к двум месяцам. Проще всего брать каждый день недели (благо их всего 7) и смотреть его месяц. День в году=день[0-6]+номер_недели


$nedelya=5;
$year=2007;
for($i=0;$i<7;$i++)
{
echo date('m',(($year-1970)*365+$nedelya+$i)*24*60*60).'<br />';
}

Правда это примерно и не учитывает високосных лет, но в общем виде верно :)

Asar
На сайте с 23.08.2004
Offline
322
#4

Уфф. Спасиб, бум разбираться...

М
На сайте с 08.02.2006
Offline
59
#5


print date("m",strtotime(date("02-01-Y 00:00:00"))+7*86400*47); // Первый месяц 48-й недели
print date("m",strtotime(date("01-01-Y 23:59:59"))+7*86400*48); // Второй месяц 48-й недели
print date("W",strtotime("1 November Y 00:00:00")); // Первая неделя ноября
print date("W",strtotime("November Y 23:59:59")); // Последняя неделя ноября

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий