Page 1 sur 1

existe-t-il une fonction dates ?

Posté : 04 mai 2005, 08:50
par Playa
Bonjour everybody, j'aimerai savoir s'il existe un script permettant de retrouver les jours (de 1 à 31) en spécifiant un numero de semaine, une année voire le mois en plus.
Thanks..

Posté : 04 mai 2005, 08:55
par Cyrano
Salut,
tu as tout un paquet de fonctions sur les manipulations de date en PHP, jette un coup d'oeil dans le manuel PHP en ligne pour une première approche et reviens nous voir si tu as éventuellement besoin d'une précision particulière :)

Posté : 04 mai 2005, 10:03
par Invité
Me revoila, j'ai trouvé ce code après un long moment de recherche.
Correspond-t-il a ce que je cherhce ?!

Code : --->

If you want to get the date of a given day in a week, this might be useful. (I.e. you want to know what is the date of Friday in week 20 of 2004)
This code was converted from Delphi source code and has been tested. No guarantees however ;-)

<?php

# Get a date by providing a week number, day of week and a year.

# Be careful! There are different definitions for weeks. Here the European definition is used.
# In Europe a week starts on Monday.
# Also the start of the first week in a year is defined differently in different countries.
# Here the ISO 8601 definition is used. This is the standard in Europe.
#
# I got the information from http://home.t-online.de/home/PeterJHaas/delphi.htm
# There are many websites with information on week numbers.
# An excellent site on this subject is http://www.pjh2.de/datetime/weeknumber/index.php
#
# This PHP source was based on the Delphi source code by Peter J. Haas
#

//give me the date of Friday week 20 of the year 2004 (Should result in Friday May 14 2004)
$aWeek=20; $aDay=05; $aYear=2004;
$adate=datefromweeknr($aYear, $aWeek, $aDay);
echo 'The date (week='.$aWeek.' day='.$aDay.' year= '.$aYear.') is '.date('D d-m-Y',$adate).'<br>';

function datefromweeknr($aYear, $aWeek, $aDay)
{
$FirstDayOfWeek=1; //First day of week is Monday
$BaseDate=4; //We calculate from 4/1 which is always in week 1
$CJDDelta=2415019; //Based on start of Chronological Julian Day
$StartDate = DelphiDate(mktime(1,0,0,01,$BaseDate,$aYear)); //The date to start with
$Offset = ($aWeek-1) * 7 - mod(floor($StartDate) + $CJDDelta + 8 - $FirstDayOfWeek,7) + $aDay - 1;
return PHPUnixTimeStamp($StartDate + $Offset);
}

#---------extra functions used----------

function DelphiDate($aPHPTime)
{
# The Unix Timestamp holds the number of seconds after January 1 1970 01:00:00
return div($aPHPTime,86400)+25569;
}

function PHPUnixTimeStamp($aDelphiDate)
{
# Delphi's TDate holds number of days after December 30 1899
return ($aDelphiDate-25569)*86400-3600;
}

function mod($number, $div)
{
return $number - floor($number/$div)*$div;
}

function div($number, $div)
{
return floor($number/$div);
}

?>

Posté : 04 mai 2005, 10:14
par Cyrano
Peut-être, je ne sais pas trop. lLa fonction datefromweeknr() de l'exemple va te retourner un timestamp qui n'est à priori pas ce que tu veux, mais d'après la formulation de ta question, je ne comprends pas exactement quelle partie tu veux récupérer en envoyant quel(s) paramètres.

Posté : 04 mai 2005, 11:20
par jujub
salut essaye ça

je ne sais as si cela te va ? :wink:
$temps=date("d/m/Y H:i:s");
les arguments
d : day
m : month
Y : Year

H :hours
i : minutes
s : seconds

Sinon comme diraient certains va voir sur http://www.google.fr/ ,cette fonction date, cela va surement pouvoir t'aider

:roll:

Posté : 04 mai 2005, 12:27
par Playa
En fait, jveu retrouver les jours par exemple :
Pour cette semaine ki est la 18 retrouver : 2, 3, 4, 5, 6 Mai
Je dispose des parametres suivants :
- num de semaine (ex :18)
- année (ex :2005)
- mois (ex : 5)
Et avec ca dc retrouver les 5 dates de la semaine du Lundi au Vendredi
Jespere que cest un peu + clair
:)

Posté : 04 mai 2005, 13:49
par Invité
Essaye une boucle for en incrémentant le paramtre jour de ta semaine

du type
for($jour=0;$jour<5;$jour++)
echo $jour;
:wink:

Posté : 04 mai 2005, 15:55
par Playa
Ca marche le code que j'ai chopé mais maintenant j'ai un pb d'affichage :

en effet ds ma premiere cellule pour le lundi j'ai :
Lundi 02-05-2005
Lundi 03-05-2005
Lundi 04-05-2005
Lundi 05-05-2005
Lundi 06-05-2005

ds la 2eme Pr le mardi j'ai :
Mardi 02-05-2005
Mardi 03-05-2005
Mardi 04-05-2005
Mardi 05-05-2005
Mardi 06-05-2005

etc...

Fodrait ke ca m affiche pr la 1ere cellule juste la 1ere ligne, pour la 2eme juste la 2eme etc...
Il doit manquer une boucle FOR ?! ou c'est parce que mon code est mal placé?!


Voila mon code :

<table width="100%" height="75%" border="6" cellpadding="5" cellspacing="2" table background="images/fond2.gif">
<tr>
<td width="10%">&nbsp;</td>
<?
//On récupère les jours
for ($i=0; $i<5; $i++) {
?>
<td width="18%" class="colonnetableau">
<? $jour=Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi");
$aWeek=$vsem; $aYear=$van;
for ($aDay=1;$aDay<6;$aDay++) {
$adate=datefromweeknr($aYear, $aWeek, $aDay);
echo "$jour[$i]";
echo ' '.date('d-m-Y',$adate).'<br>';
} ?></td>
<?
}
?>
</tr>

Posté : 04 mai 2005, 16:50
par Invité
Bon bah j'ai trouvé la soluce tout seul
Jai juste rajouté une boucle if ($i == $aDay)