Recherche des mois avec les N° de semaine et l'année [Résolu]

cs_brezoneg 104 Messages postés samedi 6 novembre 2004Date d'inscription 19 août 2015 Dernière intervention - 28 déc. 2008 à 20:15 - Dernière réponse : kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention
- 29 déc. 2008 à 22:26
Bonjour et joyeuses fêtes à tous.
Je voudrais récupérer le nom du mois sachant que je n'ai que la semaine et l'année. Je sais qu' une semaine peut être sur deux mois; Mais quelqu'un à t'il une solution ?
merci d'avance !
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 28 déc. 2008 à 23:05
3
Merci
Salut Brezoneg,

A mon avis ce n'est pas "raisonnablement" possible. Comme tu le dis une semaine peut être sur deux mois différents, ce qui fausse le résultat, et pire, il peut y avoir 2 semaines 01 sur une année (... je dis une connerie ?)
Semaine 01 du 31 décembre 1979 au 06 janvier 1980
Semaine 01 du 29 décembre 1980 au 04 janvier 1981

Au final tu n'auras pas de résultat fiable.
Bon, je viens de gribouiller ça (pas le temps de faire trop de tests) :

// search_month (année, numéro de la semaine)
function search_month ($year, $week) {
  for ($i=1; $i <= 365; $i++) {
    $mk = mktime(0, 0, 0, 1, $i, $year);
    $b = date("n", $mk);
    $w = date("W", $mk);
    if ($w == $week) return $b;
  }
}

Cordialement,

Kohntark-

Merci kohntark 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de kohntark
cs_jeca 341 Messages postés mercredi 17 juillet 2002Date d'inscription 14 juillet 2011 Dernière intervention - 29 déc. 2008 à 08:43
0
Merci
Bonjour,

Tout d'abord :
Semaine 01 du 31 décembre 1979 au 06 janvier 1980 = semaine 01 de 1980 ;
Semaine 01 du 29 décembre 1980 au 04 janvier 1981 = semaine 01 de 1981.
Donc, une seule semaine 01 par année.

Ensuite, essaie ce code :
<?php
function dateSemainePhp51($annee, $numSemaine)
{
//-- initialisation d'un objet DateTime au 4 janvier -------------------------
//-- celui-ci se trouve obligatoirement dans la semaine N° 1 -----------------
$date = new DateTime($annee . '-01-04');
//-- si le 4 janvier n'est pas un lundi, -------------------------------------
//-- le lundi précédent est le lundi de la semaine N° 1 ----------------------
if ($date -> format('N') > 1)
{
$date -> modify('last monday');
}
//-- on ajoute le nombre de semaines -----------------------------------------
//-- pour avoir le lundi de la semaine recherchée ----------------------------
$date -> modify('+' . ($numSemaine - 1) . ' week');
$dateDeb = $date -> format('d/m/Y');
//-- on ajoute 6 jours pour avoir le dernier jour de la semaine recherchée ---
$date -> modify('+6 day');
$dateFin = $date -> format('d/m/Y');

return array($dateDeb, $dateFin);
}

function dateSemainePhp5($annee, $numSemaine)
{
$timeStamp = strtotime($annee . '-01-04');
//-- si le 4 janvier n'est pas un lundi, -------------------------------------
//-- le lundi précédent est le lundi de la semaine N° 1 ----------------------
if (date('N', $timeStamp) > 1)
{
$timeStamp = strtotime('last monday', $timeStamp);
}
//-- on ajoute le nombre de semaines -----------------------------------------
//-- pour avoir le lundi de la semaine recherchée ----------------------------
$timeStamp = strtotime('+' . ($numSemaine - 1) . ' week', $timeStamp);
$dateDeb = date('d/m/Y', $timeStamp);
//-- on ajoute 6 jours pour avoir le dernier jour de la semaine recherchée ---
$timeStamp = strtotime('+6 day', $timeStamp);
$dateFin = date('d/m/Y', $timeStamp);

return array($dateDeb, $dateFin);
}
//----------------------------------------------------------------
//----------------------------------------------------------------
$annee = 2009;
$numSemaine = 44;

$jour = dateSemainePhp5($annee, $numSemaine);
echo 'la semaine N° ' . $numSemaine . ' de l\'année ' . $annee .
'
commence le ' . $jour[0] .
'
et se termine le ' . $jour[1] . '

';

$jour = dateSemainePhp51($annee, $numSemaine);
echo 'la semaine N° ' . $numSemaine . ' de l\'année ' . $annee .
'
commence le ' . $jour[0] .
'
et se termine le ' . $jour[1];
?>
Les 2 fonctions font la même chose, mais 'dateSemainePhp51' ne fonctionne qu'à partir de php 5.1, mais est de 3 à 4 fois plus rapide que l'autre.
Commenter la réponse de cs_jeca
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 29 déc. 2008 à 09:23
0
Merci
Salut,

Semaine 01 du 31 décembre 1979 au 06 janvier 1980 = semaine 01 de 1980 ;

Semaine 01 du 29 décembre 1980 au 04 janvier 1981 = semaine 01 de 1981.

Donc, une seule semaine 01 par année.

=> oui, sauf que ça reste à mon sens tendancieux. Tout dépend de "l'enregistrement" initial des données.
Si je prends un exemple :
Enregistrement d'un événement survenu le 29/12/1980
$year = date("Y", [timestamp de la date]);
$week = date("W", [timestamp de la date]);
INSERT INTO machin (year, week) VALUES ('$year', '$week');

=> impossible de savoir si il s'agit de janvier ou de décembre 1980
Je cherche peut être la petite bête mais c'est un exemple tout à fait possible.

Cordialement,

Kohntark -
Commenter la réponse de kohntark
cs_jeca 341 Messages postés mercredi 17 juillet 2002Date d'inscription 14 juillet 2011 Dernière intervention - 29 déc. 2008 à 09:53
0
Merci
C'est parce que tu n'utilises pas le bon paramètre de format :
<?php
$date = '1980-12-29';
$annee = date('o', strtotime($date));
$semaine = date('W', strtotime($date));
$jour = date('d/m/Y', strtotime($date));
echo 'le ' . $jour . ' se trouve dans la semaine N° ' . $semaine . ' de l\'année ' . $annee;
?>
Commenter la réponse de cs_jeca
cs_brezoneg 104 Messages postés samedi 6 novembre 2004Date d'inscription 19 août 2015 Dernière intervention - 29 déc. 2008 à 13:41
0
Merci
Merci pour vos multiple réponses,
je devrais m'en sortir avec.
Bon réveillon !
Commenter la réponse de cs_brezoneg
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 29 déc. 2008 à 22:26
0
Merci
Je suis bien d'accord, je ne montrais pas ici ce qu'il fallait écrire, mais un exemple d'enregistrement (erroné) des données. C'est pour cela que je précisais "Je cherche peut être la petite bête", mais, tu seras sans doute d'accord avec moi, c'est une erreur qui doit arriver très fréquemment.
Après tout dépend de la pertinence des données que possède Brezoneg et de ce qu'il veut en faire. Si une erreur d'un mois ne pose pas de problème alors le tour est joué, dans le cas contraire c'est impossible.

Kohntark -
Commenter la réponse de kohntark

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.