Recherche des mois avec les N° de semaine et l'année

Résolu
cs_brezoneg Messages postés 104 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 19 août 2015 - 28 déc. 2008 à 20:15
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 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 !
A voir également:

6 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 déc. 2008 à 23:05
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-
3
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
29 déc. 2008 à 08:43
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.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
29 déc. 2008 à 09:23
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 -
0
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
29 déc. 2008 à 09:53
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;
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_brezoneg Messages postés 104 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 19 août 2015
29 déc. 2008 à 13:41
Merci pour vos multiple réponses,
je devrais m'en sortir avec.
Bon réveillon !
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
29 déc. 2008 à 22:26
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 -
0
Rejoignez-nous