Quel est le format correct à passer à la date()
fonction en PHP si je veux insérer le résultat dans une datetime
colonne de type MySQL ?
J'ai essayé date("Y-M-D G:i:s")
mais cela insère juste "0000-00-00 00:00:00" à chaque fois.
Quel est le format correct à passer à la date()
fonction en PHP si je veux insérer le résultat dans une datetime
colonne de type MySQL ?
J'ai essayé date("Y-M-D G:i:s")
mais cela insère juste "0000-00-00 00:00:00" à chaque fois.
Réponses:
Le problème est que vous utilisez 'M'
et 'D'
, qui sont des représentations textuelles, MySQL attend une représentation numérique du format2010-02-06 19:30:13
Essayez: date("Y-m-d H:i:s")
qui utilise les équivalents numériques.
edit: basculé G
sur H
, bien que cela n'ait pas d'impact, vous souhaiterez probablement utiliser le format 24 heures avec les 0 en tête.
D'après les commentaires de la date()
page de manuel de php :
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
Vous aviez le «Y» correct - c'est une année complète, mais «M» est un mois à trois caractères, tandis que «m» est un mois à deux chiffres. Même problème avec «D» au lieu de «d». 'G' est une heure à 1 ou 2 chiffres, où 'H' a toujours un 0 en tête si nécessaire.
Voici une solution alternative: si vous avez la date en PHP comme horodatage, contournez-la en la manipulant avec PHP et laissez la base de données se charger de la transformer en utilisant la FROM_UNIXTIME
fonction.
mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)
mysql> select * from a_table;
+---------------------+
| a_date |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
J'utilise le code PHP suivant pour créer une variable que j'insère dans une colonne MySQL DATETIME.
$datetime = date_create()->format('Y-m-d H:i:s');
Cela contiendra la date et l'heure actuelles du serveur.
$date_old = '23-5-2016 23:15:23';
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));
//Format should be like 'Y-m-d H:i:s'`enter code here`
Formater l'horodatage dans la colonne MySQL DATETIME:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
J'utilise cette fonction (PHP 7)
function getDateForDatabase(string $date): string {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
Anciennes versions de PHP (PHP <7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
function getDateForDatabase(string $date) : string {
à function getDateForDatabase($date) {
Pourquoi les déclarations de type jettent une erreur que je ne connais pas assez PHP pour le dire.
Il n'est pas nécessaire d'utiliser la méthode date () de PHP si vous n'utilisez pas d'horodatage. S'il dateposted
s'agit d'une colonne datetime, vous pouvez insérer la date actuelle comme ceci:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Cela m'a rendu fou à la recherche d'une réponse simple. Enfin, j'ai fait cette fonction qui semble intercepter toutes les entrées et donner une bonne chaîne SQL correcte ou au moins valide et vérifiable. Si c'est 1999-12-31, c'est probablement faux, mais ne générera pas une mauvaise erreur dans MySQL.
function MakeSQLDate($date) {
if (is_null($date)) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
}
if (($t = strtotime($date)) === false) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
} else {
return date('Y-m-d H:i:s', strtotime($date));
}
}
Utiliser la DateTime
classe en PHP7 +:
function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('UTC'));
$dt->setDate($year, $month, $day);
$dt->setTime(0, 0, 0, 0); // set tine to midnight
return $dt->format("Y-m-d H:i:s");
}
Un petit addendum à la réponse acceptée: si la base de données datetime
est stockée en UTC (ce que je fais toujours), vous devez utiliser à la gmdate("Y-m-d H:i:s")
place de date("Y-m-d H:i:s")
.
Ou, si vous préférez laisser MySQL gérer tout, comme certaines réponses le suggèrent, j'insérerais MySQL UTC_TIMESTAMP
, avec le même résultat.
Remarque: j'ai compris la question concernant l'heure actuelle.
C'est une façon plus précise de le faire. Il place les décimales derrière les secondes pour plus de précision.
$now = date('Y-m-d\TH:i:s.uP', time());
Remarquez le .uP
.
Plus d'informations: https://stackoverflow.com/a/6153162/8662476