В этом 2014 году есть:Сколько недель в каждом месяце 2015 и 2016 годов на основе стандарта ISO?
Jan-4
Feb-4
Mar-5
Apr-4
May-4
Jun-5
Jul-4
Aug-4
Sep-5
Oct-4
Nov-4
Dec-5
Как рассчитать это для любого данного года?
В этом 2014 году есть:Сколько недель в каждом месяце 2015 и 2016 годов на основе стандарта ISO?
Jan-4
Feb-4
Mar-5
Apr-4
May-4
Jun-5
Jul-4
Aug-4
Sep-5
Oct-4
Nov-4
Dec-5
Как рассчитать это для любого данного года?
Существует несколько способов определить «недели в месяц» точно. Предполагая, что ваш счетчик определяется (как ваши цифры указуют):
How many Mondays lie in each month of the year?
Вы можете создать его так:
Простой:
SELECT EXTRACT(month FROM d) AS mon, COUNT(*) AS weeks
FROM generate_series('2014-01-01'::date
, '2014-12-31'::date
, interval '1 day') d
WHERE EXTRACT(isodow FROM d) = 1 -- only Mondays
GROUP BY 1
ORDER BY 1;
Быстро:
SELECT EXTRACT(month FROM d) AS mon, COUNT(*) AS weeks
FROM generate_series ('2014-01-01'::date -- offset to first Monday
+ (8 - EXTRACT(isodow FROM '2014-01-01'::date)::int)%7
, '2014-12-31'::date
, interval '7 days') d
GROUP BY 1
ORDER BY 1;
В любом случае вы получаете:
mon weeks
1 4
2 4
3 5
4 4
5 4
6 5
7 4
8 4
9 5
10 4
11 4
12 5
Просто замените 2014
на год интереса к каждому запросу.
Стандарт ИСО не касается количества понедельников в месяц. (Я не уверен, пытается ли это то, к чему стремится OP.) Первый понедельник в 2014 году - это действительно 2013-12-30, что касается недель ISO. –
@Mike: Первый понедельник в * ISO * 2014 год - 2013-12-30. Первый понедельник в григорианский год (который является общим значением «2014») - 2014-01-06. «Число недель в месяц» не определяется ISO - или вопросом. Я переделал наиболее вероятное значение из заданных чисел. –
Применение ISO 8601 в месяц, как предложил here
select
to_char(d, 'YYYY Mon') as "Month",
case when
extract(dow from d) in (2,3,4)
and
extract(day from (d + interval '1 month')::date - 1) + extract(dow from d) >= 33
then 5
else 4
end as weeks
from generate_series(
'2014-01-01'::date, '2014-12-31', '1 month'
) g (d)
;
Month | weeks
----------+-------
2014 Jan | 5
2014 Feb | 4
2014 Mar | 4
2014 Apr | 4
2014 May | 5
2014 Jun | 4
2014 Jul | 5
2014 Aug | 4
2014 Sep | 4
2014 Oct | 5
2014 Nov | 4
2014 Dec | 4
возможно дубликат [PHP получить номер недели в течение месяца] (http://stackoverflow.com/questions/5853380/php-get-number -не недели за месяц) – Sal00m
Почему бы просто не понять _руля_ для нумерации недель в году: http://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year –
Ваш вопрос не имеет смысла. * Стандарт ISO не определяет какую-либо связь между неделями и месяцами. Дата либо выражается месяцем и днем месяца, либо неделями и днями недели, ** никогда не смешивается **. * Http://en.wikipedia.org/wiki/ISO_week_date # Weeks_per_month – pozs