2014-09-04 1 views
0

Cette année 2014 a:Combien de semaines par mois de l'année 2015 et 2016 sont basées sur la norme 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 

Comment calculer cela pour une année donnée?

+2

double possible de [nombre get PHP de la semaine pour le mois] (http://stackoverflow.com/questions/5853380/php-get-number -de-semaine-pour-mois) – Sal00m

+0

Pourquoi ne pas simplement comprendre le _rule_ pour numéroter les semaines dans une année: http://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year –

+1

Votre question n'a pas de sens. * La norme ISO ne définit aucune association de semaines à mois. Une date est exprimée avec un mois et un jour du mois, ou avec une semaine et un jour de la semaine, ** jamais un mélange **. * Http://en.wikipedia.org/wiki/ISO_week_date # Weeks_per_month – pozs

Répondre

1

Il existe plusieurs façons de définir exactement "semaines dans un mois". En supposant que votre compte est défini (comme vos chiffres indiquent):

How many Mondays lie in each month of the year?

Vous pouvez générer comme ça:

simple:

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; 

rapide:

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; 

De toute façon vous obtenez:

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 

Remplacez simplement 2014 par l'année d'intérêt dans chaque requête.

+0

La norme ISO ne concerne pas le nombre de lundis d'un mois. (Je ne sais pas si c'est ce que le PO essaie d'obtenir.) Le premier lundi de 2014 est en réalité 2013-12-30, en ce qui concerne les semaines de l'ISO. –

+0

@Mike: Le premier lundi de l'année * ISO * 2014 est le 2013-12-30. Le premier lundi de l'année grégorienne (qui est le sens commun de "2014") est le 2014-01-06. Le "nombre de semaines dans un mois" n'est pas défini par l'ISO - ni par la question. J'ai inversé le sens le plus probable à partir des nombres donnés. –

0

L'application de la norme ISO 8601 à un mois comme l'a suggéré 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 
Questions connexes