Date et semaines avec PHP - PHP - Programmation
Marsh Posté le 19-04-2007 à 19:26:10
c'est pas vraiment ce que les règles du forum racontent, t'es gentil mais il va falloir que tu écrives un peu plus que les signatures des fonctions pour qu'on t'aide...
Marsh Posté le 19-04-2007 à 19:31:17
Code :
|
bon y'a surrement mieux
tu devrais pouvoir faire pareil pour ton autre fonction
http://fr.php.net/mktime
Marsh Posté le 19-04-2007 à 20:19:01
@zapan666 : Merci beaucoup pour ton aide.
@TotalRecal l : Qu'est ce qui te permet de me parler ainsi ? J'ai été poli dans mon message donc "t'es gentil", la prochaine fois tu t'abstiens si c'est pour poster des message sans intérets. De plus, difficile d'être plus explicite.
C'est dingue le nombre de mec qui te prenne de haut sur ce forum de programmation. Sortez prendre l'air de temps en temps, ça vous rendra moins aigri.
Marsh Posté le 19-04-2007 à 20:27:05
Bah des semaines y'en a toujours 52
Si tu veux une donnée utile, il te faut le premier lundi avant de début de l'année
J'ai fais ça perso :
Code :
|
Après mattes la fonction strtotime, tu lui fileras le nombre de semaines en plus que tu veux par rapport à la premiere semaine de l'année (qui commence par un lundi, ici $firstMondayInYear)
Marsh Posté le 19-04-2007 à 20:34:12
NoiBe49 a écrit : @zapan666 : Merci beaucoup pour ton aide. @TotalRecal l : Qu'est ce qui te permet de me parler ainsi ? J'ai été poli dans mon message donc "t'es gentil", la prochaine fois tu t'abstiens si c'est pour poster des message sans intérets. De plus, difficile d'être plus explicite. |
http://forum.hardware.fr/hfr/Progr [...] 4544_1.htm -> ce forum n'a pas pour vocation de faire le boulot des autres, juste de les aider.
Ta question pourrait etre un énoncé d'un devoir. Or, tu n'as strictement rien fait pour y répondre apparemment, tu as choisi la solution de facilité en nous demandant de nous palucher le travail.
Marsh Posté le 20-04-2007 à 12:22:55
Shinuza a écrit : Bah des semaines y'en a toujours 52 |
pas con
Marsh Posté le 20-04-2007 à 16:42:44
Shinuza a écrit : Bah des semaines y'en a toujours 52 |
Salut, pas tout à fait vrai , il en a de 52 à 54 ...
http://www.merlyn.demon.co.uk/weekinfo.htm#CWpCY
mçme si pour le 54 je comprends moins bien.
Marsh Posté le 20-04-2007 à 17:46:55
sub1 a écrit : Salut, pas tout à fait vrai , il en a de 52 à 54 ... |
Citation : weeks or part-weeks |
Ce qui revient de toutes façons à 52 semaines, et la technique que je donne tiens compte des bouts de semaines, vu qu'on part toujours du premier lundi de l'année (ou de l'année précedente)
Mon algo fonctionne très bien
Marsh Posté le 21-04-2007 à 10:40:16
Bonjour,
Les semaines d'une année peuvent être numérotées de 1 à 53. Cela se reproduit alternativement
tous les 5 et 6 ans. Exemple : les années 1998, 2004, 2009, 2015, etc... comportent une semaine N° 53.
D'autre part, en utilisant le 31-12 pour récupérer le nombre de semaines, sans test, peut donner un résultat totalement erroné. Exemple : le 31-12-2007 se trouve dans la semaine N° 1 de l'année 2008. Dans ce cas, le nombre de semaines sera le N° de semaine du dimanche précédent.
Pour déterminer la date du lundi de la semaine N° xx, le code de Shinuza ne fonctionnera pas à chaque fois, car le 1er lundi de janvier n'est pas obligatoirement le lundi de la semaine N° 1. Exemple : le lundi de la semaine N° 1 en 2008 est le 31-12-2007, alors que la fonction de Shinuza retourne 07-01-2008. Je rappelle que la semaine N° 1 est la semaine qui contient le 1er jeudi de janvier (norme ISO 8601), ce qui signifie que, si le 1er janvier est mardi, mercredi ou jeudi, le lundi de la semaine N° 1 est le lundi précédent, et non pas le 1er lundi de janvier.
Marsh Posté le 21-04-2007 à 12:05:35
Euh, juste pour dire que j'ai testé mon algo jusqu'a 2038 (la date ou php plante) et les dates/semaines correspondent, libre à vous de faire ce que vous voulez ensuite...
Et je vois pas ou j'ai dis que le premier lundi de janvier était le lundi de semaine N°1, mon algo récupère - bordel - la première semaine complète (donc qui commence par un lundi certes) mais la première de l'année.
Donc en 2008 il récupèrera du lundi 31-12-2007 au dimanche 06-01-2008, et la semaine d'avant se terminera le dimanche 30-12-2007
Marsh Posté le 22-04-2007 à 19:15:15
Désolé, je me suis effectivement planté dans mes explications. Mais ce que tu appelle un algo n'en est pas un puisqu'il s'agit simplement d'un appel à une fonction native.
Cela dit, pour toutes les années ci-dessous, ça ne fonctionne pas :
php 4.4.6
1975 => date retournée par la fonction : 1975-01-06 -- date attendue : 1974-12-30
1976 => date retournée par la fonction : 1976-01-05 -- date attendue : 1975-12-29
1981 => date retournée par la fonction : 1981-01-05 -- date attendue : 1980-12-29
1986 => date retournée par la fonction : 1986-01-06 -- date attendue : 1985-12-30
1987 => date retournée par la fonction : 1987-01-05 -- date attendue : 1986-12-29
1992 => date retournée par la fonction : 1992-01-06 -- date attendue : 1991-12-30
1997 => date retournée par la fonction : 1997-01-06 -- date attendue : 1996-12-30
1998 => date retournée par la fonction : 1998-01-05 -- date attendue : 1997-12-29
2003 => date retournée par la fonction : 2003-01-06 -- date attendue : 2002-12-30
2004 => date retournée par la fonction : 2004-01-05 -- date attendue : 2003-12-29
2009 => date retournée par la fonction : 2009-01-05 -- date attendue : 2008-12-29
2014 => date retournée par la fonction : 2014-01-06 -- date attendue : 2013-12-30
2015 => date retournée par la fonction : 2015-01-05 -- date attendue : 2014-12-29
2020 => date retournée par la fonction : 2020-01-06 -- date attendue : 2019-12-30
2025 => date retournée par la fonction : 2025-01-06 -- date attendue : 2024-12-30
2026 => date retournée par la fonction : 2026-01-05 -- date attendue : 2025-12-29
2031 => date retournée par la fonction : 2031-01-06 -- date attendue : 2030-12-30
2032 => date retournée par la fonction : 2032-01-05 -- date attendue : 2031-12-29
2037 => date retournée par la fonction : 2037-01-05 -- date attendue : 2036-12-29
php 5.2.1
1974 => date retournée par la fonction : 1974-01-07 -- date attendue : 1973-12-31
1975 => date retournée par la fonction : 1975-01-06 -- date attendue : 1974-12-30
1976 => date retournée par la fonction : 1976-01-05 -- date attendue : 1975-12-29
1980 => date retournée par la fonction : 1980-01-07 -- date attendue : 1979-12-31
1981 => date retournée par la fonction : 1981-01-05 -- date attendue : 1980-12-29
1985 => date retournée par la fonction : 1985-01-07 -- date attendue : 1984-12-31
1986 => date retournée par la fonction : 1986-01-06 -- date attendue : 1985-12-30
1987 => date retournée par la fonction : 1987-01-05 -- date attendue : 1986-12-29
1991 => date retournée par la fonction : 1991-01-07 -- date attendue : 1990-12-31
1992 => date retournée par la fonction : 1992-01-06 -- date attendue : 1991-12-30
1997 => date retournée par la fonction : 1997-01-06 -- date attendue : 1996-12-30
1998 => date retournée par la fonction : 1998-01-05 -- date attendue : 1997-12-29
2002 => date retournée par la fonction : 2002-01-07 -- date attendue : 2001-12-31
2003 => date retournée par la fonction : 2003-01-06 -- date attendue : 2002-12-30
2004 => date retournée par la fonction : 2004-01-05 -- date attendue : 2003-12-29
2008 => date retournée par la fonction : 2008-01-07 -- date attendue : 2007-12-31
2009 => date retournée par la fonction : 2009-01-05 -- date attendue : 2008-12-29
2013 => date retournée par la fonction : 2013-01-07 -- date attendue : 2012-12-31
2014 => date retournée par la fonction : 2014-01-06 -- date attendue : 2013-12-30
2015 => date retournée par la fonction : 2015-01-05 -- date attendue : 2014-12-29
2019 => date retournée par la fonction : 2019-01-07 -- date attendue : 2018-12-31
2020 => date retournée par la fonction : 2020-01-06 -- date attendue : 2019-12-30
2025 => date retournée par la fonction : 2025-01-06 -- date attendue : 2024-12-30
2026 => date retournée par la fonction : 2026-01-05 -- date attendue : 2025-12-29
2030 => date retournée par la fonction : 2030-01-07 -- date attendue : 2029-12-31
2031 => date retournée par la fonction : 2031-01-06 -- date attendue : 2030-12-30
2032 => date retournée par la fonction : 2032-01-05 -- date attendue : 2031-12-29
2036 => date retournée par la fonction : 2036-01-07 -- date attendue : 2035-12-31
2037 => date retournée par la fonction : 2037-01-05 -- date attendue : 2036-12-29
Compte tenu de résultats différents en fonction de la version de php, et dans tous les cas erronés, je donnerais comme code - bordel - :
Code :
|
qui, lui, retourne bien la date du lundi de la semaine N° 1.
Marsh Posté le 23-04-2007 à 14:16:28
Il me semble que la fonction strftime("%u" ) (je crois qu'il s'agit de celle-là) renvoie la semaine actuelle (comptée depuis le 1er janvier de l'année en cours).
A partir de là, il est facile de trouver le nombre de semaines passées (en décrémentant strftime de 1).
Marsh Posté le 23-04-2007 à 18:01:46
ou pas, le premier de l'année peut être un lundi, du coup tu te retrouves avec s-1.
@eca : Je répète, j'ai testé le système jusqu'en 2038 et oui j'ai un système qui permet de vérifier si le premier de l'année est un lundi ²
Marsh Posté le 24-04-2007 à 09:21:57
@shinuza : le but n'est pas de trouver la date du 1er lundi de l'année, ce que retourne ta fonction, mais la date du lundi de la semaine N° 1, ce qui n'est pas du tout la même chose, car si le 1er janvier est un mardi, mercredi ou jeudi, le lundi de la semaine N° 1 est le dernier lundi de l'année précédente, et le 1er lundi de l'année se trouve donc dans la semaine N° 2.
Marsh Posté le 24-04-2007 à 19:50:35
T'es vraiment, vraiment long à comprendre, mais vraiment.
Ma "fonction" retourne le premier lundi de l'année, et vérifie s'il fait parti de la première semaine, ok?
Prenons un exemple : Janvier 2010.
Le premier lundi de l'année est un 4 qui arrive dans la semaine 2, ma fonction (je n'ai pas tout posté, c'est censé d'une être utilisé et vendu en entreprise et deux cela risque moyennement d'aider NoiBe49 que de lui macher le travail) vérifie si le premier de l'année est un lundi :
-Si oui, elle retourne la première semaine de l'année
-Si non, elle récupère la semaine entière a partir du premier de l'année en l'occurence un vendredi et va chercher le bout de semaine manquant, finalement j'ai une semaine qui s'établie comme suit : Du lundi 28-12-2009 au dimanche 03-01-2010
Marsh Posté le 25-04-2007 à 09:01:53
Excellente argumentation, mais résultat de l'exemple totalement faux :
Selon la norme ISO 8601, la semaine N° 1 (exprimé de différentes manières mais équivalentes) est :
Donc, si "c'est censé ... être utilisé et vendu en entreprise", à ta place, je m'empresserais de revoir la copie avant que ça se voit. D'autre part, "cela risque moyennement d'aider NoiBe49" que de l'orienter sur une mauvaise piste.
Ceci est ma dernière contribution à cette discussion qui ne présente plus aucun intérêt, vu que tout a été dit.
Cependant, une dernière chose : T'es vraiment, vraiment long à comprendre, mais vraiment. Une seule règle : la norme ISO 8601
Marsh Posté le 25-04-2007 à 16:32:11
Je vois pas ou est votre problème, cela marche très bien dans cette exemple d'un calendrier semaine par semaine, vous pouvez tester :
Code :
|
Marsh Posté le 19-04-2007 à 19:16:58
Bonjour,
L'un des trucs le plus casse couille, la gestion/manipulation des dates.
Je cherche à faire 2 choses :
1- Ecrire une fonction que me renvoi le nombre de semaines dans l'année passée en paramètre.
2- Une autre fonction me donnerais la donnerais la date complète du lundi par rapport au numéro de semaine passé en paramètre
Si quelqu'un pouvait me donner un coup de main .
Merci à tous