J'ai un champ dans une table MySQL qui a un type de données timestamp
. Je sauvegarde des données dans cette table. Mais lorsque je passe l'horodatage (1299762201428
) à l'enregistrement, il enregistre automatiquement la valeur 0000-00-00 00:00:00
dans cette table.
Comment puis-je stocker l'horodatage dans une table MySQL?
Voici ma déclaration INSERT
:
INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
(2,5,9,'2',1299762201428,5,10,20,'1')
passe comme ça
date('Y-m-d H:i:s','1299762201428')
Bonjour, utilisez la fonction FROM_UNIXTIME()
pour cela.
Comme ça:
INSERT INTO table_name
(id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES
(1,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1'),
(2,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1')
$created_date = date("Y-m-d H:i:s");
$sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')";
$result = mysql_query($sql);
Quelques points à clarifier:
donc la bonne réponse serait
$timestamp = '1299762201428';
$date = date('Y-m-d H:i:s', substr($timestamp, 0, -3));
Le type de données ' bigint unsigned ' peut répondre à cette exigence.
J'imagine que le champ dans lequel vous essayez de sauvegarder la valeur est un champ datetime ce n'est pas le cas, mais il semble en aller de même pour les horodatages . Si tel est le cas, mysql s'attend à ce que le format soit Année-mois-jour Heure: minute: seconde. Pour enregistrer l’horodatage, vous devez convertir le champ en numérique à l’aide d’une requête telle que
alter table <table_name> change <field> <field> bigint unsigned
Si vous utilisez l'heure actuelle, vous pouvez utiliser now () ou current_timestamp.
Utilisez FROM_UNIXTIME()
.
Remarque: 1299762201428 ressemble davantage à un horodatage milliseconde (comme Date () * 1 en JavaScript), et vous devrez probablement le diviser par 1000.
Vérifiez le type de champ dans la table, enregistrez simplement la valeur d'horodatage dans un type de données tel que bigint
etc.
Pas de type datetime
Cela devrait le faire:
$time = new DateTime;
Utilisez le type de champ datetime
. Il présente de nombreux avantages tels que la lisibilité humaine (personne ne lit les horodatages) et les fonctions MySQL .
Pour convertir un horodatage Unix, vous pouvez utiliser la fonction MySQL FROM_UNIXTIME(1299762201428)
. Pour reconvertir, vous pouvez utiliser UNIX_TIMESTAMP
: SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.
Bien sûr, si vous n'aimez pas la fonction MySQL, vous pouvez toujours utiliser PHP: 'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.
Mieux vaut utiliser le type de données varchar(15)
.
Vous pouvez faire: $date = \gmdate(\DATE_ISO8601);
.
Vous pouvez également utiliser now()
dans votre requête, à savoir:
insert into table (time) values(now());
Il utilisera l'horodatage actuel.
Si l'horodatage est l'heure actuelle, vous pouvez utiliser la fonction mysql NOW()