web-dev-qa-db-fra.com

Enregistrer l'horodatage dans la table mysql en utilisant php

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')
81
gautamlakum

passe comme ça

date('Y-m-d H:i:s','1299762201428')
145
jimy

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')
47
Richard Tuin
$created_date = date("Y-m-d H:i:s");
$sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')";
$result = mysql_query($sql);
18
Tushar Kumar Kundan

Quelques points à clarifier:

  • Le type de champ d'horodatage MySQL ne stocke pas les horodatages Unix, mais plutôt une valeur de type datetime.
  • L'horodatage UNIX est un numéro d'un type int régulier.
  • L'horodatage dont vous parlez n'est pas un horodatage Unix normal, mais un horodatage avec millisecondes. 

donc la bonne réponse serait 

$timestamp = '1299762201428';
$date = date('Y-m-d H:i:s', substr($timestamp, 0, -3));
13
Your Common Sense

Le type de données ' bigint unsigned ' peut répondre à cette exigence.

3
RollingBoy

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.

2
Belinda

Utilisez FROM_UNIXTIME() .

Remarque: 1299762201428 ressemble davantage à un horodatage milliseconde (comme Date () * 1 en JavaScript), et vous devrez probablement le diviser par 1000.

1
Udo G

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

1
user319198

Cela devrait le faire:

  $time = new DateTime; 
1
misaizdaleka

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

0
Znarkus

Mieux vaut utiliser le type de données varchar(15).

0
gautamlakum

Vous pouvez faire: $date = \gmdate(\DATE_ISO8601);.

0
HelpNeeder

Vous pouvez également utiliser now() dans votre requête, à savoir:

insert into table (time) values(now());

Il utilisera l'horodatage actuel.

0
Masood Moshref

Si l'horodatage est l'heure actuelle, vous pouvez utiliser la fonction mysql NOW()

0
ipsum