Jump to content

[RESOLU][MySQL] un TimeStamp sous forme d'int


Recommended Posts

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!

Link to comment
Share on other sites

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) ...

timestamp.jpg

Après pour ce qui est de ta requete, on ne peux pas t'aider sans plus d'information ...

++

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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 :eeek2:

bonne nuit cette fois ci je ferme boutique :zarb: ++

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 :smack:

en tout cas c'est la façon la plus simple je trouve. ;)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...