Page 1 sur 1

Récupérer le premier jour de la premiere semaine de l'année

Posté : 06 oct. 2009, 23:02
par xlebiterrois
Bonjour,

Je coince sur un problème peut-être pas bien compliqué. J'ai beau triturer date et mktime, je ne m'en sors pas. Voila, je cherche à recupérer le timestamp du premier jour de la première semaine d'une année, sachant que la première semaine d'une année est celle qui contient un jeudi. Si j'ai bien compris la première semaine d'une année peut commencer en décembre ou en janvier.

Merci

Re: Récupérer le premier jour de la premiere semaine de l'année

Posté : 07 oct. 2009, 15:45
par ouckileou
Il y a peut-être moyen de faire un truc super dynamique tout propre, mais comme il n'y a pas des milliers de cas de figure tu peux bien te faire une petite fonction perso, en t'aidant du tableau de cette page : http://fr.wikipedia.org/wiki/Semaine_1

Ce qui donnerait si je ne me suis pas gouré :
<?php
function premierJourDeLannee($annee=2010) {
	$tabLibellesJours = Array(0=>'dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi');

	$premierJanvier = date("w", mktime(0, 0, 0, 1, 1, $annee));

	$timePremierJour = null;
	switch ($premierJanvier) {
		case 4: // jeudi
			$timePremierJour = mktime(0, 0, 0, 12, 29, $annee-1);
			break;
		case 3: // mercredi
			$timePremierJour = mktime(0, 0, 0, 12,30, $annee-1);
			break;
		case 2: // mardi
			$timePremierJour = mktime(0, 0, 0, 12, 31, $annee-1);
			break;
		case 1: // lundi
			$timePremierJour = mktime(0, 0, 0, 1, 1, $annee); // premier janvier = premier jour de l'année
			break;		
		case 0: // dimanche
			$timePremierJour = mktime(0, 0, 0, 1, 2, $annee);
			break;
		case 6: // samedi
			$timePremierJour = mktime(0, 0, 0, 1, 3, $annee);
			break;
		case 5: // vendredi
			$timePremierJour = mktime(0, 0, 0, 1, 4, $annee);
			break;		
	}

	$datePremierJour = date("d/m/Y", $timePremierJour);
	
	echo 'Le 1er janvier '.$annee.' est un '.$tabLibellesJours[$premierJanvier].', le premier jour de la première semaine de l\'année est donc le lundi '.$datePremierJour.'.';
}

for($i=2000;$i<=2012;$i++) {
	premierJourDeLannee($i);
	echo '<br /><br />';
}
?>
Le 1er janvier 2000 est un samedi, le premier jour de la première semaine de l'année est donc le lundi 03/01/2000.

Le 1er janvier 2001 est un lundi, le premier jour de la première semaine de l'année est donc le lundi 01/01/2001.

Le 1er janvier 2002 est un mardi, le premier jour de la première semaine de l'année est donc le lundi 31/12/2001.

Le 1er janvier 2003 est un mercredi, le premier jour de la première semaine de l'année est donc le lundi 30/12/2002.

Le 1er janvier 2004 est un jeudi, le premier jour de la première semaine de l'année est donc le lundi 29/12/2003.

Le 1er janvier 2005 est un samedi, le premier jour de la première semaine de l'année est donc le lundi 03/01/2005.

Le 1er janvier 2006 est un dimanche, le premier jour de la première semaine de l'année est donc le lundi 02/01/2006.

Le 1er janvier 2007 est un lundi, le premier jour de la première semaine de l'année est donc le lundi 01/01/2007.

Le 1er janvier 2008 est un mardi, le premier jour de la première semaine de l'année est donc le lundi 31/12/2007.

Le 1er janvier 2009 est un jeudi, le premier jour de la première semaine de l'année est donc le lundi 29/12/2008.

Le 1er janvier 2010 est un vendredi, le premier jour de la première semaine de l'année est donc le lundi 04/01/2010.

Le 1er janvier 2011 est un samedi, le premier jour de la première semaine de l'année est donc le lundi 03/01/2011.

Le 1er janvier 2012 est un dimanche, le premier jour de la première semaine de l'année est donc le lundi 02/01/2012.
A vérifier toute de même :P
Mais je pense que ça a déjà dû être fait... au moins dans un framework quelconque

Re: Récupérer le premier jour de la premiere semaine de l'année

Posté : 07 oct. 2009, 21:12
par Invité
Bonjour,

Merci, je ne pense pas assez au "case". J'ai tenté ma chance avec des tableaux et cela semble aussi fonctionner, en ayant lu comme toi le wikipedia :

Code : Tout sélectionner

$annee = $_GET['annee']; $premiers_jours = array(2, 1, 31, 30, 29, 4, 3); $mois_premiers_jours = array(1, 1, 12, 12, 12, 1, 1); $rang_premiers_jours = date('w', mktime(12, 0, 0, 1, 1, $annee)); if($rang_premiers_jours >=2 and $rang_premiers_jours <=4) --$annee; $lundi_sem_1 = mktime(12, 0, 0, $mois_premiers_jours[$rang_premiers_jours], $premiers_jours[$rang_premiers_jours], $annee); $debut_semaine_x = $lundi_sem_1 + ($sem - 1)*7*24*3600;
Merci, en tout cas pour ta réponse, je vais m'en inspirer

@+