IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] n° de semaine non française, est-ce possible ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Par défaut [Dates] n° de semaine non française, est-ce possible ?
    Bonjour,

    je sais bien que php utilise utilise ISO-8601 pour gérer les dates, toutefois je suis face à un problème concernant le n° des semaines.

    pour le jour 30 octobre 2008:
    php trouve 44 comme n° de semaine
    Or, sur mon serveur, date +%W ne retourne 43

    Le problème c'est que je travaille avec des applis qui génèrent des datas en utilisant la date du système. Du coup j'ai un gros problème de cohérence.

    Y a t il une solution ?
    merci

  2. #2
    Membre chevronné Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Par défaut
    Bonsoir,

    En effet à chaque projet où on parle de numéro de semaine, c'est compliqué et le débat repart...

    La règle :
    Si une semaine est à cheval sur deux années :
    - si le jeudi est en décembre, c'est la semaine 53.
    - Si le jeudi est en janvier, c'est la semaine 1.
    Autrement dit, c'est le mois qui a au moins 4 jours qui donne le numéro de semaine.

    PHP gère ça très bien.
    Donc si tu as des incohérences, c'est que ton serveur ne respècte pas cette règle. Pour lui, la semaine 1 est la première semaine complète. Dans ce cas :

    Il faut que tu regardes le numéro de semaine du 1er janvier de l'année, vu par PHP. Si c'est 1 tu enlèves 1 au numéro de semaine, sinon tu ne changes rien.

    Il y a 2 cas particuliers :
    - Si le 1er janvier est un lundi : les 2 systèmes sont d'accord. On retourne l e numéro de semaine.
    - Si la date recherchée est en semaine 1, et que le premier janvier est en semaine 1, alors on ne peux pas enlever 1. Il faut donc retourner le numéro de semaine du 31 décembre de l'année précédente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function getNumeroSemaine($mktime) {
      $semaine1erJan = date( 'W', mktime (0, 0, 0, 1, 1, date('Y', $mktime)) );
      $jour1erJan = date( 'w', mktime (0, 0, 0, 1, 1, date('Y', $mktime)) );
     
      //cas particulier : le 1er janvier de l'année est un lundi.
      if ($jour1erJan == 1) return date('W', $mktime);
     
      //Le 1er janvier est en semaine 1 
      if ($semaine1erJan == 1) {
        $semaine = date('W', $mktime);
     
    	//cas particulier : le 1er janvier est en semaine 1 et la date cherchée est en semaine 1
        if ($semaine == 1) 
          return date( 'W', mktime (0, 0, 0, 12, 31, date('Y', $mktime) -1) );
        else
          return $semaine -1;
      } 
     
      //Le 1er janvier n'est pas en semaine 1.
      else {
        return date('W', $mktime);
      }
    }
     
    //Le 30 octobre 2008 (le 1er janvier est un mardi)
    echo getNumeroSemaine(mktime (0, 0, 0, 10, 30, '2008')) . '<br />'; //43
    //Le 3 janvier 2008 (le 1er janvier est un mardi)
    echo getNumeroSemaine(mktime (0, 0, 0, 1, 3, '2008')) . '<br />'; //01
    //Le 25 janvier 2007 (cas du lundi 1er janvier)
    echo getNumeroSemaine(mktime (0, 0, 0, 1, 25, '2007')) . '<br />'; //04
    //Le 25 janvier 2006 (le 1er janvier est un dimanche)
    echo getNumeroSemaine(mktime (0, 0, 0, 1, 25, '2006')) . '<br />'; //04
     
    ?>
    Gillou

  3. #3
    Membre actif

    Homme Profil pro
    Concepteur d'applications web
    Inscrit en
    Avril 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Concepteur d'applications web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2003
    Messages : 102
    Par défaut
    Merci, je vais tester ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] numéro de semaine
    Par jules_29 dans le forum Langage
    Réponses: 4
    Dernier message: 13/09/2006, 16h16
  2. Liste date d'une semaine
    Par shinta dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/06/2006, 16h11
  3. Calcul de dates : début de semaine, de mois, de trimestre
    Par pyxosledisciple dans le forum Access
    Réponses: 13
    Dernier message: 22/02/2006, 08h07
  4. [Dates] Numero de semaine ISO et dates ??
    Par MadCat34 dans le forum Langage
    Réponses: 9
    Dernier message: 19/11/2005, 00h00
  5. ORA-01846: jour de semaine non valide
    Par szdavid dans le forum Oracle
    Réponses: 7
    Dernier message: 16/11/2005, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo