date en fonction de la semaine

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : date en fonction de la semaine

par rakizm » 18 janv. 2007, 16:43

Merci pour ces eclairsissements
:)
c beaucoup mieux comme ça
Encore une fois merci à la prochaine.

par titerm » 18 janv. 2007, 14:57

Plusieurs remarques.
- Déjà, il faut savoir ce que tu considère comme la semaine 1. Admettons cette norme
Et un calendrier de demo ici.
Il faut donc trouver la référence de base a savoir
* 'La semaine qui porte le numéro 01 est celle qui contient le premier jeudi de janvier.'

- Ensuite, tu essais de faire faire une evaluation mathématique à une fonction non faite pour cela. "+($n-1)" ... Cela risque de poser des problèmes d'interprétation (D'ou mon +$n week -1 week dans l'éxemple.)

<?php
function debutsem($n,$year){
    $n--; 
    // On ajout les semaines et on retire 3 jours pour passer de jeudi à lundi
    $timesp=(strtotime("first Thursday january $year +$n weeks -3 days" ));
    
    setlocale(LC_TIME, "fr");
    // On ne réutilise pas $year car la semaine 1 peut commencer l'année précédente... voir l'exemple en 2008
    $datedeb = strftime("%Y-%m-%d ",$timesp);
    
    return $datedeb;
}

echo debutsem(1,2008), "\n";
echo debutsem(2,2008), "\n";
echo debutsem(26,2008), "\n";
echo debutsem(52,2008), "\n";

Code : Tout sélectionner

2007-12-31 2008-01-07 2008-06-23 2008-12-22

par rakizm » 18 janv. 2007, 14:18

Ah tien ça c pas bete d'y avoir pensé.
Maintenant voilà ce ke g fait avec ce que tu m'a donné

function debutsem($n,$year){
	if ($n == 1)
		$timesp=(strtotime("01 january $year"));
	if ($n == 2)
		$timesp=(strtotime("01 january $year +1 week"));
	else
		$timesp=(strtotime("01 january $year +($n-1) weeks"));
	
	setlocale(LC_TIME, "fr");
	$datedeb = strftime("$year-%m-%d ",$timesp);
	$jour_debut=date("w",mktime(0,0,0,substr($datedeb,5,2),substr($datedeb,8,2),substr($datedeb,0,4)));
	if ($jour_debut == 0)
		$datedeb=date("Y-m-d",mktime(0,0,0,substr($datedeb,5,2),substr($datedeb,8,2) +1 ,substr($datedeb,0,4)));
	if ($jour_debut == 6)
		$datedeb=date("Y-m-d",mktime(0,0,0,substr($datedeb,5,2),substr($datedeb,8,2) +2 ,substr($datedeb,0,4)));
	
	return $datedeb;
} 
pourriez vous y jetter un coup d'oeil et me dire ce ke je pourrai changer.
Parceque ça ne marche pas pour des $n>2.

PS: l'idée pour trouver la date du début de semaine c'est de prendre le 01/01/$year et de rajouter ($n numéro de semaine) -1 puisque la première semaine c déjà 1.

par titerm » 18 janv. 2007, 00:36

je dis que c'est inutile de calculer manuellement ce que php sait faire tout seul
// Si tu veux la 10eme semaine 
$semaine = 10
// Si tu ne précise pas l'année, l'année en cours est utilisée
// On demande donc le lundi de janvier sans plus de précision, il prend le premier lundi du janvier de l'année spécifié ou encours si année omise
// Puis on enleve le nombre de semaines -1 car le la semaine du premier lundi compte déjà pour 1.
$timestamp = strtotime("monday january 2007 +$semaine week -1 week"); 
setlocale(LC_TIME, "fr");
echo strftime("la semaine $week commence le %A %d %B ",$timestamp);

Code : Tout sélectionner

la semaine 10 commence le lundi 06 mars

date en fonction de la semaine

par rakizm » 17 janv. 2007, 19:27

Bonjour.

J'aimerai en fonction du n° semaine choisi, pouvoir récupérer la date de début de cette semaine.
Pouvez vous m'aider ?
j'ai essayé avec cette fonction

Code : Tout sélectionner

function debutsem($num_semaine) { if (date("w")==0) $casdudimanche=7; else $casdudimanche=date("w"); $premier_jour = mktime(0,0,0,date("m"),date("d")-$casdudimanche+1-$num_semaine*7,date("Y")); $datedeb = date("Y-m-d", $premier_jour); return $datedeb; }
Mais franchement je suis pas très convaincu(c pas la mienne).
à première vue ça donne la date début d'une semaine de l'année courante et pas d'une année précédente.
Vous etes d'accord avec moi??
si oui (et si non aussi :P) est ce que vous pouvez m'aider.