8792 sujets

Développement web côté serveur, CMS

bonsoir !

bon mise au point de suite , j'suis nul en php , et la fonction date()
m'énerve au plus au point .. enfin surtout ce qu'elle me retourne après un passage
via mySql !

en fait lors d'une instruction je saisi la date courante que je mets dans une base .

<input type="hidden" name="dt" value="<?php echo date('d/m/Y'); ?>" />


rien d'extraordiaire , sauf que je n'ai jamais réussi à lire la valeur envoyée à mysql...
Pour etre précis cela me renvoie ' 00/00/0000 ' , ce qui une jolie réunion de zéro, mais raz le bol de leur réunion "tuperware" Smiley ohwell (étant dans les zéros j'ai été voir leur site Smiley rolleyes ..mais j'ai pas du bien lire ou comprendre ...

Je me suis emêlé les pinceaux par la suite dans les timestamp, date time ...même si je crois en avoir saisi les différences
Ca m'a pas l'air si compliqué pourtant !

En désespoir de cause , je me suis dis que ce n'est qu'une valeur (chaines de caratères) donc je l'ai stoké dans un champ "varchar" ..et là c'est ok ..amsi pas sûr que ce soit "la méthode" adéquate ...

est-ce que cela pose un problème , cette manière de faire !??
Et dans la façon traditionnel est-ce que vous connaissez un bon tuto sur l'utilisation des dates et rapport avec les bases de données !??

merci d'avance

Edit :
a écrit :

MySQL displays DATE values in 'YYYY-MM-DD' format


je dois peut-etre simplement faire la demande date php dans cet ordre : date('Y/m/d') Smiley rolleyes
Modifié par kzone (05 Jan 2007 - 22:22)
Ma méthode pour utiliser les dates avec mysql:
Je créé un champ INT (8).
Et j'enregistre ma date sous la forme AAAAMMJJ
Ce qui me donne pour la date d'aujourdhui (cad le 3 janvier 2007).
20070103

Pourquoi faire comme ca? Ca me permet ensuite de classer mes dates par ordre chronologique avec des requetes sql.

J'ai ensuite juste à faire un petit traitement de ma chaine pour la réafficher comme je le veux (03/01/2007, 03.01.07, etc..)

Si tu veux quelques petits trucs sur les dates tu peux aller voir:
Opération sur les dates
Bonjour.

Les fonctions dates, c'est de toute façon toujours prise de tête. (confère bug de l'an 2000)

Diversités culturelles, calendriers, fuseaux horaires, GMT, heure d'été, heure d'hiver, séparateur... Il y a même un collectif qui s'est bagarré contre le passage à l'an 2007. ça fait refléchir... Smiley mur

Généralement, le format DATE de MySql, c'est "YYYY-MM-DD", ce qui se traduit en php par date("Y-m-d").

Seulement, les humains français (francophones ?) lisent DD/MM/YYYY.

La question à se poser est de savoir si la date enregistrée dans la base est purement "décorative" c'est à dire destinée a être lue par des humains, ou a une fonction d'ordonnancement des enregistrements (tri, comparaison...)

A partir de là, si c'est décoratif, varchar est OK.

Sinon, il faut stocker la date de telle mannière que MySql puisse la manipuler, donc sous format DATE, ou timestamp.

MAIS, Mais, mais, si on choisit timestamp, il faut être sur qu'aucune date soit inférieure au 1er janvier 1970, car certains systèmes comme windows ne savent pas gérer les timestamp négatifs.

Donc, il est bon de savoir convertir d'un format à l'autre.

Je met en oeuvre trois fonctions php : date(), mktime() et explode():


function phpToMySql($aDate)  // au format 03/01/2007 soit jour, mois année
{
   $t = explode("/",$aDate); // en pièces détachées
   $day = $t[0];
   $month = $t[1];
   $year = $t[2];
   $timestamp = mktime(0,0,0,$month,$day,$year); // mois, jour, année
   $result=date("Y-m-d",$timestamp);
   return $result;
}



function mySqlToPhp($aDate)  // au format 2007-01-03  soit année, mois, jour
{
   $t = explode("-",$aDate); // en pièces détachées
   $day = $t[2];
   $month = $t[1];
   $year = $t[0];
   $timestamp = mktime(0,0,0,$month,$day,$year); // mois, jour, année
   $result=date("d/m/Y",$timestamp);
   return $result;
}


J'ai écrit ça à main levé. S'il y a des erreurs, les signaler...
Salut,
maniT4c a écrit :
Pourquoi faire comme ca? Ca me permet ensuite de classer mes dates par ordre chronologique avec des requetes sql.
Franchement, je vois difficilement comment on pourrait faire plus crade que ça. Smiley eek

A ce compte-là, autant stocker le timestamp dans un champ INT. Aussi incroyable que ça puisse paraître, le timestamp augmente avec le temps, donc tu pourras aussi classer par ordre chronologique avec des requêtes SQL. Smiley lol

Sinon, je suis d'accord avec GeorgesM. En MySQL, il y a aussi la "fonction" UNIX_TIMESTAMP qui permet de récupérer un timestamp à partir d'une date.
Salut, Eldebaran. Et bonne année 1167606000 * !

Ce qui reste obscur, pour moi, c'est les traitements des dates inférieures au 1er janvier 1970.
Sur linux (majorité des hébergeurs) les timestamp négatifs font référence aux dates antérieures à 1970. Donc, pas de problèmes
Mais que se passe t'il sur un serveur windows...


* 1er janvier 2007 en timestamp () Smiley sourire
GeorgesM a écrit :
Salut, Eldebaran. Et bonne année 1167606000 * !
Bonne année à toi aussi. Smiley cligne
GeorgesM a écrit :
Ce qui reste obscur, pour moi, c'est les traitements des dates inférieures au 1er janvier 1970.
Sur linux (majorité des hébergeurs) les timestamp négatifs font référence aux dates antérieures à 1970. Donc, pas de problèmes
Mais que se passe t'il sur un serveur windows...
Certes...

Si l'on a besoin d'un large panel de dates (ce qui est plutôt rare), la chaîne de caractères est peut-être adaptée.
re-bonjour à tous et merci pour toutes ses réponses !

a écrit :

eldebaran a écrit :
A ce compte-là, autant stocker le timestamp dans un champ INT


donc mon stockage dans un 'varchar' ce doit très "beurk" .... Smiley langue
Mais comme je ne devais pas retraiter cette date par la suite ( mais çà fait un peu aller manger chez Maxim's en passant par la porte de service Smiley smokin )

a écrit :

GeorgesM
A partir de là, si c'est décoratif, varchar est OK.

...je prend comme argent comptant. Smiley cligne
a écrit :

GeorgesM a écrit :
Je met en oeuvre trois fonctions php : date(), mktime() et explode():

je vais aller tester cela de suite , mais bien pratique cette fonction mktime( )

Dans mes infos j'ai trouvé également la fonction getDate(int timestamp) qui retourne un tableaux associatif avec les index seconds, minutes, hours, mday, wday, mon, year, yday, weekday ....

C'est facilement géreables comme données !?

... je crois que cela va ressembler à une journée php aujourd'hui Smiley lol
ps: merci mpour le lien Manit4c , çà peut me servir , mais dans ce cas il ne parle pas de traitement sql !
Modifié par kzone (03 Jan 2007 - 11:21)
kzone a écrit :
donc mon stockage dans un 'varchar' ce doit très "beurk" .... Smiley langue
Pas forcément, je faisais référence à la solution de maniT4c.
C'est sur que ma solution ne permet pas de traiter les dates de manière aussi complete qu'en utilisant le timestamp mais elle avait le mérite d'être rapide et simple à mettre en place Smiley smile .
Antoine Cailliau a écrit :
Pour répondre à la question sur la gestion des timestamps sous Windows, il existe un excellent post de Romain Bourdon
> http://blog.wampserver.com/index.php/2005/11/18/windows-au-pays-des-timestamps/


Merci, Antoine.

ça a le mérite d'être clair : windows ne sait pas gérer les timestamps négatifs.
Il faut donc se méfier si on développe sur une plate-forme locale type wamp (windows apache mysql php), ou si l'hébergeur n'a pas choisi une des solutions unix pour ses serveurs.
En effet, la prudence est de mise. Mais il est toujours important de savoir sur quelle plate-forme on développe. Le multi-plateforme a aussi ses limites.
maniT4c a écrit :
Ma méthode pour utiliser les dates avec mysql:
Je créé un champ INT (8).
Et j'enregistre ma date sous la forme AAAAMMJJ

Et tu es fier de t'en vanter ? Smiley fache
C'est du grand n'importe quoi !

Je suppose aussi que, chez toi, tu ranges tes baskets dans ton frigo et qu'on trouve des tranches de jambon entre deux livres dans ta bibliothèque. Smiley langue

M'enfin tu as peut-être raison... on parvient bien à enfoncer une vis avec un marteau, donc... Smiley langue

Quand aux timestamp négatifs...
On n'a aucun problème quand on utilise le bon type de champ dans une base de données.
a écrit :

bison a écrit :
Et tu es fier de t'en vanter ? fache
C'est du grand n'importe quoi !

Je suppose aussi que, chez toi, tu ranges tes baskets dans ton frigo et qu'on trouve des tranches de jambon entre deux livres dans ta bibliothèque


...et moi c'est le deuxième post que je lis de ta part qui au lieu d'apporter une explication constructive, ou une méthode plus adéquate , prend plutôt malin plaisir à rabaisser ceux qui selon leur niveau essaie d'aider les autres .... Smiley fache

et je préfère mettre mes baskets dans le frigo de manit4c
Modifié par kzone (05 Jan 2007 - 03:40)
Bison a écrit :

Quand aux timestamp négatifs...
On n'a aucun problème quand on utilise le bon type de champ dans une base de données.

As-tu le liens que j'ai posté ? Comme tu sembles paresseux que pour le lire, je t'ai fait une petit sélection.

a écrit :
Windows ne sait pas gérer les valeurs négatives de timestamps! Et ceci peut entrainer de très grosses incohérences sur vos développements.
Antoine Cailliau a écrit :

As-tu le liens que j'ai posté ? Comme tu sembles paresseux que pour le lire,...
Paresseux !
Ah bon ?
Je peux savoir sur quelles infos tu te base pour porter ce genre de jugement ? Smiley fache
Antoine Cailliau a écrit :

..., je t'ai fait une petit sélection.
Que sais-tu de mon niveau en PHP ? Smiley ohwell

Antoine Cailliau a écrit :
Windows ne sait pas gérer les valeurs négatives de timestamps! Et ceci peut entrainer de très grosses incohérences sur vos développements.
Puisque tu aimes bien les copiés/collés je t'en donne un :
La DOC PHP a écrit :
Before PHP 5.1.0, negative timestamps were not supported under any known version of Windows and some other systems as well. Therefore the range of valid years was limited to 1970 through 2038.

Tu vois, je n'ai pas besoin d'aller sur un article qui ne m'apprend rien de plus que ce que je ne sais déjà.
De plus, la fiabilité du mien ne laisse guère de place au doute !
Et les mots importants sont même : Avant PHP 5.1.0 Smiley cligne

kzone a écrit :
et je préfère mettre mes baskets dans le frigo de manit4c

C'est clair !
D'ailleurs je m'en voudrais de te priver d'un tel plaisir ? Smiley cligne
Et c'est bien dommage , parce que vu que tu viens d'écrire 2 articles sur le
timestamp, qui donnent quelques indications pertinentes ... tu aurais pu nous faire
partager tes connaissances plutôt ...!

et n'oublie pas ... toi aussi tu as enfoncé des vis avec un marteau à tes débuts ! Smiley cligne