OVH Cloud OVH Cloud

mktime() php4 -5

4 réponses
Avatar
jpll
Bonjour,

Je suis en train de me plonger sur une appli pour gérer le cimetière
destiné au serveur (SME 7)de ma mairie (pas riche) . SME utilise php4 et
je me retrouve coincé par mes dates limites au delà du 31/12/2037 pour
indiquer la fin des concessions cinquantenaires. J'ai aperçu sur fclp qq1
qui faisait référence à des ajouts de fonctions php4/php5. Quid?

J'ai contourné le pb en enregistrant sur ma table mysql mes dates de fin
sous la forme (à la louche): $date_limite=(date("j/m", mktime(0,0,0,mois
de départ, jour de départ).(date("/Y",mktime(....année départ)+durée
concession) mais je ne trouve ça un peu... bourrin.

Des suggestions plus élégantes?

Merci.

jpll

ps par contre j'ai été très étonné de constater que mktime fabriquait
des timestamps négatifs et qu'ils étaient correctement interprétés par
date()?? Existe-t-il une limite basse?

4 réponses

Avatar
Olivier Miakinen

Je suis en train de me plonger sur une appli pour gérer le cimetière
destiné au serveur (SME 7)de ma mairie (pas riche) . SME utilise php4 et
je me retrouve coincé par mes dates limites au delà du 31/12/2037 pour
indiquer la fin des concessions cinquantenaires.


J'imagine que ce qui t'intéresse c'est surtout le jour, plutôt que
l'heure, la minute et la seconde... Voir alors les fonctions de
calendriers, qui existent depuis PHP4 :

http://fr3.php.net/manual/fr/ref.calendar.php

ps par contre j'ai été très étonné de constater que mktime fabriquait
des timestamps négatifs et qu'ils étaient correctement interprétés par
date()?? Existe-t-il une limite basse?


<cit. http://fr3.php.net/manual/fr/function.mktime.php>
Sur les systèmes où time_t un entier signé sur 32bits, ce qui est le
plus courant de nos jours, la période valide pour year est quelque part
près de 1901 et 2038, cependant, cette limitation n'est plus valable
depuis PHP 5.1.0.
</>

Je pense qu'il vaut mieux éviter d'utiliser les timestamps négatifs, et
de restreindre sa période d'utilisation à 1970-2037.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
jpll
Le Thu, 20 Jul 2006 10:29:27 +0000, Olivier Miakinen a écrit :


Je suis en train de me plonger sur une appli pour gérer le cimetière
destiné au serveur (SME 7)de ma mairie (pas riche) . SME utilise php4
et je me retrouve coincé par mes dates limites au delà du 31/12/2037
pour indiquer la fin des concessions cinquantenaires.


J'imagine que ce qui t'intéresse c'est surtout le jour, plutôt que
l'heure, la minute et la seconde... Voir alors les fonctions de
calendriers, qui existent depuis PHP4 :

http://fr3.php.net/manual/fr/ref.calendar.php


Non c'est pas tout à fait ça. Un conseiller municipal s'est tapé toute
le registre du cimetière qu'il a enregistré sous excel. J'ai repris
la feuile de calc que j'ai transformée en csv et injecté le tout dans
une base mysql. j'ai fait une petite class qui me découpe les
jour/mois/année (sous cette forme dans le fichier csv) pour la date de
départ de la concession et me la transforme en timestamp avec
$start=mktime(.......) de là pour les dates de fin de durée de
concession je fabrique un deuxième timestamp avec les mêmes éléments +
la durée de la concession $end=mktime(..... ,année de départ+durée)

bon, je vais m'en sortir en créant un champs supplémentaire dans ma
table ou j'enregistrerai en varchar sous la forme /jour/mois/année de
départ+durée pour les timestamps > 2145826800.


ps par contre j'ai été très étonné de constater que mktime
fabriquait des timestamps négatifs et qu'ils étaient correctement
interprétés par date()?? Existe-t-il une limite basse?


<cit. http://fr3.php.net/manual/fr/function.mktime.php> Sur les systèmes
où time_t un entier signé sur 32bits, ce qui est le plus courant de nos
jours, la période valide pour year est quelque part près de 1901 et
2038, cependant, cette limitation n'est plus valable depuis PHP 5.1.0.
</>

Je pense qu'il vaut mieux éviter d'utiliser les timestamps négatifs, et
de restreindre sa période d'utilisation à 1970-2037.


j'aimerais bien, mais j'ai des concessions achetées depuis 1910 avec un
bon paquet de cinquantenaires dans les années 50! ;)

Je suis obligé de le faire car un bon nombre de concession sont hors
limite, les ayant-droits inconnus, et que le cimetière manque de
places...;)


Avatar
Olivier Miakinen

J'imagine que ce qui t'intéresse c'est surtout le jour, plutôt que
l'heure, la minute et la seconde... Voir alors les fonctions de
calendriers, qui existent depuis PHP4 :

http://fr3.php.net/manual/fr/ref.calendar.php


Non c'est pas tout à fait ça.


Ah ? Tu as besoin de savoir à la seconde près à quelle heure une
concession a été achetée ?

Un conseiller municipal s'est tapé toute
le registre du cimetière qu'il a enregistré sous excel. J'ai repris
la feuile de calc que j'ai transformée en csv et injecté le tout dans
une base mysql. j'ai fait une petite class qui me découpe les
jour/mois/année (sous cette forme dans le fichier csv) pour la date de
départ de la concession et me la transforme en timestamp avec
$start=mktime(.......) de là pour les dates de fin de durée de
concession je fabrique un deuxième timestamp avec les mêmes éléments +
la durée de la concession $end=mktime(..... ,année de départ+durée)


Je ne vois pas où est le problème pour utiliser les fonctions de
calendrier, qui te donnent un entier représentant une date, entier
valide sur des millénaires.

Tu utiliseras alors :
$start = cal_to_jd(CAL_GREGORIAN, mois, jour, année)
$end = cal_to_jd(CAL_GREGORIAN, mois, jour, année+50)
http://fr3.php.net/manual/fr/function.cal-to-jd.php

Si vraiment tu veux passer par un mktime() unix, tu peux alors utiliser
ensuite unixtojd(). Mais ceci n'est faisable que pour les dates
comprises entre 1970 et 2037 puisqu'en dehors de cette période le
résultat est aléatoire (soit avant 1970, soit après 2037, selon que
les entiers sont considérés ou non comme signés).
http://fr3.php.net/manual/fr/function.unixtojd.php

bon, je vais m'en sortir en créant un champs supplémentaire dans ma
table ou j'enregistrerai en varchar sous la forme /jour/mois/année de
départ+durée pour les timestamps > 2145826800.

[...] j'ai des concessions achetées depuis 1910 avec un
bon paquet de cinquantenaires dans les années 50! ;)


Alors il est complètement déraisonnable d'utiliser quelque chose qui
n'est pas défini pour les dates antérieures à 1970. Encore une fois, à
moins que tu n'aies besoin d'une précision inférieure au jour, et que
*toutes* les dates soient comprises entre 1970 et 2037, tu ne *dois* pas
utiliser mktime ou ta base de données sera inutilisable le jour où tu
changeras d'hébergeur ou de version de PHP.

Je suis obligé de le faire car un bon nombre de concession sont hors
limite, les ayant-droits inconnus, et que le cimetière manque de
places...;)


Oui, tu es obligé d'utiliser calendar plutôt que mktime, nous sommes
bien d'accord. ;-)

--
Olivier Miakinen


Avatar
Yannick
Le Thu, 20 Jul 2006 10:16:01 +0000, jpll a écrit :

Bonjour,

Je suis en train de me plonger sur une appli pour gérer le cimetière
destiné au serveur (SME 7)de ma mairie (pas riche) . SME utilise php4 et
je me retrouve coincé par mes dates limites au delà du 31/12/2037 pour
indiquer la fin des concessions cinquantenaires. J'ai aperçu sur fclp qq1
qui faisait référence à des ajouts de fonctions php4/php5. Quid?

J'ai contourné le pb en enregistrant sur ma table mysql mes dates de fin
sous la forme (à la louche): $date_limite=(date("j/m", mktime(0,0,0,mois
de départ, jour de départ).(date("/Y",mktime(....année départ)+durée
concession) mais je ne trouve ça un peu... bourrin.

Des suggestions plus élégantes?

Merci.

jpll

ps par contre j'ai été très étonné de constater que mktime fabriquait
des timestamps négatifs et qu'ils étaient correctement interprétés par
date()?? Existe-t-il une limite basse?


Bonjour,

je suis très certainement hors-sujet, mais as-tu déjà jeté un oeil à
"OpenCimetière" dont il
existe une démo à cette
adresse: http://demo.openmairie.org/openmairie_cimetiere/ .
C'est un produit libre et gratuit.
Travaillant également dans une mairie, c'est une solution que nous nous
sommes promis d'examiner de près à l'occasion.