serik Posté(e) le 25 avril 2006 Partager Posté(e) le 25 avril 2006 Salut, comme écrit dans le sujet, je cherche à récupérer un timestamp sous forme d'int. La doc dit : TIMESTAMP[(M)] A timestamp. The range is '1970-01-01 00:00:00' to partway through the year 2037. A TIMESTAMP column is useful for recording the date and time of an INSERT or UPDATE operation. By default, the first TIMESTAMP column in a table is automatically set to the date and time of the most recent operation if you do not assign it a value yourself. You can also set any TIMESTAMP column to the current date and time by assigning it a NULL value. Variations on automatic initialization and update properties are described in Section 11.3.1.1, “TIMESTAMP Properties as of MySQL 4.1”. A TIMESTAMP value is returned as a string in the format 'YYYY-MM-DD HH:MM:SS' with a display width fixed at 19 characters. To obtain the value as a number, you should add +0 to the timestamp column. Mais mes tentatives restes infructueuses :-( $sql = "SELECT `PostTime`+0, `Title`, `Content`, `Author` FROM `News` ORDER BY `PostTime` DESC LIMIT 0,4"; Ca ne me retourne rien. (pas d'erreurs, juste un timestamp vide). PHP Version 4.3.10 Merki! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 25 avril 2006 Partager Posté(e) le 25 avril 2006 Tu veux en faire quoi? Calcul à coup de substr pour l'affichage? Pourquoi ne pas utiliser la fonction SQL qui est faite pour ça (STRFTIME ou un truc du genre) ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
cb_golden Posté(e) le 25 avril 2006 Partager Posté(e) le 25 avril 2006 A mon avis tu te prends trop la tête, l'utilisation du timestamp est très simple et C'EST UN INT DONC TU N'AS PAS A LE TRANSFORMER EN INT... Voila ce que dit PHP.net --> Tu récupères la date actuelle, tu fais un getdate, cela te donne un array avec les champs ci sessous... <?php $today = getdate(); print_r($today); ?> L'exemple ci-dessus va afficher quelque chose de similaire à : Array ( [seconds] => 40 [minutes] => 58 [hours] => 21 [mday] => 17 [wday] => 2 [mon] => 6 [year] => 2003 [yday] => 167 [weekday] => Tuesday [month] => June [0] => 1055901520 ) Tu peux mémoriser $today[0] ce qui revient à prendre le timestamp... Ensuite pour l'afficher: string date ( string format [, int timestamp] ) Donc par exemple avec ta variable : echo date( dmy , $today[0] ); ce qui te donnera jour mois année Voila j'espere que tu as capté, le timestamp est la façon la plus simple de travailler les dates, regarde l'image du dessous, c'est ce qu'utilise PHPBB (topic time) ... Après pour ce qui est de ta requete, on ne peux pas t'aider sans plus d'information ... ++ Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 26 avril 2006 Auteur Partager Posté(e) le 26 avril 2006 Je veux récupérer le timestamp sous forme d'int pour appeler ensuite date("Le format", timeStamp) et avoir une date formatée à la française genre "Posté le 26/04/2006 à 2h07 par Serik". Le problème vient du fait que mySQL formatte les timestamps par défaut : "A TIMESTAMP value is returned as a string in the format 'YYYY-MM-DD HH:MM:SS' with a display width fixed at 19 characters. To obtain the value as a number, you should add +0 to the timestamp column." J'aimerais savoir où est-ce qu'on met ce "+0" Lien vers le commentaire Partager sur d’autres sites More sharing options...
cb_golden Posté(e) le 26 avril 2006 Partager Posté(e) le 26 avril 2006 tout est dans ma réponse du dessus... Sur ton champ MySQL, la ou tu poses ton timestamp, met un INT comme sur mon screenshot de PHPBB (et non pas un champ de type timestamp). Pour récup la date sous forme de timestamp, c'est encore écrit ds mon 1er post : $timestamp = getdate(); $timestamp sera alors un tableau et c'est donc $timestamp[0] que tu dois mémoriser, c'est la qu'on parle de 0 ... donc dans une page fait : $timestamp = getdate(); echo $timestamp[0] .'<br>'; echo date( d m y , $timestamp[0]) .'<br>'; pour l'affichage, récupère ton timestamp et met le en forme avec la fonction date( XXX , $timestamp[0] ) avec XXX ton formatage pour une affichage en français. Voila t'as plus qu'à regarder le formatage pour afficher la date en français sur php.net bonne nuit cette fois ci je ferme boutique ++ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 26 avril 2006 Partager Posté(e) le 26 avril 2006 Je veux récupérer le timestamp sous forme d'int pour appeler ensuite date("Le format", timeStamp) et avoir une date formatée à la française genre "Posté le 26/04/2006 à 2h07 par Serik". Le problème vient du fait que mySQL formatte les timestamps par défaut : "A TIMESTAMP value is returned as a string in the format 'YYYY-MM-DD HH:MM:SS' with a display width fixed at 19 characters. To obtain the value as a number, you should add +0 to the timestamp column." J'aimerais savoir où est-ce qu'on met ce "+0" Ah ouais :) Donc si tu veux te servir de ton TIMESTAMP (et c'est un type date spécifique à mySQL), passe par la fonction DATE_FORMAT, ce qui déchargera php de ce travail là. (non, même pas besoin de faire un int, et de passer par un timestamp unix) Sinon, tu as aussi UNIX_TIMESTAMP qui crée un timestamp unix (utilisable avec date(), strftime()) à partir d'un TIMESTAMP. Enfin, si tu cherches à convertir ton TIMESTAMP en INT (parce que c'est peut-être plus simple, etc), y a pas 36 solutions : tu ajoute une nouvelle colonne, nommée X, de type UNSIGNED INT(10) puis : UPDATE table SET X = UNIX_TIMESTAMP(Y) tu vire Y et tu renomme X en Y. cb_golden> au lieu d'utiliser une fonction qui est pas des plus légères (calculer la date du jour à partir d'un timestamp unix), utilise time() ... Pour le reste, un timestamp mySQL (celui qu'il reçoit) n'est pas un int. C'est une chaîne de caractères, qui ne peut pas tenir avec la précision actuelle de php au niveau des int. Eventuellement, c'est un float. Je veux récupérer le timestamp sous forme d'int pour appeler ensuite date("Le format", timeStamp) et avoir une date formatée à la française genre "Posté le 26/04/2006 à 2h07 par Serik". Le problème vient du fait que mySQL formatte les timestamps par défaut : "A TIMESTAMP value is returned as a string in the format 'YYYY-MM-DD HH:MM:SS' with a display width fixed at 19 characters. To obtain the value as a number, you should add +0 to the timestamp column." J'aimerais savoir où est-ce qu'on met ce "+0" Je doute que cela soit une addition, mais plutôt une des options des colonnes mySQL : tu peux ajouter des zéros automatiquement sur les nombres. Regarde dans phpmyadmin, c'est au niveau du UNSIGNED. Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 26 avril 2006 Auteur Partager Posté(e) le 26 avril 2006 En fait je viens de trouver, c'est balo :-) C'est juste une question de nom de colonne. $sql = "SELECT UNIX_TIMESTAMP(`PostTime`) AS PostTime, `Title`, `Content`, `Author` FROM `News` ORDER BY `PostTime` DESC LIMIT 0,4"; Sinon faire `PostTime`+0 AS PostTime, ça marche aussi mais le timestamp n'est pas dans le bon format. Sinon entre le formattage par MySQL et php, lequel sera le plus rapide sachant que mes connections à MySQL sont limitées à 1 simultanément par Free? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 26 avril 2006 Partager Posté(e) le 26 avril 2006 Normalement, le SGBD n'est pas censé faire de l'affichage, donc c'est plus à php de faire cela. Mais étant donné que mySQL dispose de fonctions plus aptes à travailler sur des dates (le format date), ça devrait être plus rapide de s'en servir. Notamment: un timestamp unix, il faut le convertir, chopper l'année, ce qui n'est pas forcément simple (année bixestile, etc) alors que ton timestamp mySQL contient déjà toute ces informations là. Bref. Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 26 avril 2006 Auteur Partager Posté(e) le 26 avril 2006 En fait ce qui est bien en mettant un timestamp et non pas un int dans la BDD c'est que sous phpMyAdmin, la date est affichée directement en clair. Bon allez, RESOLU. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 26 avril 2006 Partager Posté(e) le 26 avril 2006 serik> non mais si ça doit être une date, autant foutre une vraie date. Ca te permettra de faire des opérations de date sans trop te fatiguer (genre WHERE date BETWEEN DATE_SUB(NOW(), 1 DAY) AND NOW() ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
cb_golden Posté(e) le 26 avril 2006 Partager Posté(e) le 26 avril 2006 cb_golden> au lieu d'utiliser une fonction qui est pas des plus légères (calculer la date du jour à partir d'un timestamp unix), utilise time() ... Effectivement ca prend moins de ressources... Je l'avais oublié celle la en tout cas c'est la façon la plus simple je trouve. Lien vers le commentaire Partager sur d’autres sites More sharing options...
serik Posté(e) le 26 avril 2006 Auteur Partager Posté(e) le 26 avril 2006 J'ai mis ma colonne en auto CURRENT_TIMESTAMP, donc exit la date actuelle côté Php... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.