Je ne sais pas comment spécifier mon type de données comme datetime ou timestamp, je pense que j'aurai besoin des deux mais sur les différents événements. Mon site Web vend des produits et des services dans le monde entier et dispose également d'un système de compte permettant à l'utilisateur de se connecter. Veuillez clarifier les points suivants:
- Date et heure actuelles où le client achète des produits sur mon site Web: Datetime?
- Date et heure de livraison en fonction de leur emplacement et de la date / heure d'achat, calculées à partir de notre système: Datetime?
La dernière fois qu'ils se sont connectés sur leur compte: Horodatage?
- Quel est le code en php pour stocker la date d'achat (date actuelle) puis la stocker dans la base de données?
- Veuillez expliquer comment utiliser chacun d'eux car après avoir lu de nombreuses explications sur Internet, je ne comprends toujours pas très bien.
Réponses:
Horodatages MySQL :
Sont stockés en UTC
Ils sont convertis en UTC lors du stockage et reconvertis dans votre fuseau horaire lors de la récupération. Si vous modifiez les paramètres de fuseau horaire , les valeurs récupérées changent également.
Peut être automatiquement initialisé et mis à jour
Vous pouvez définir leur valeur par défaut et / ou leur valeur de mise à jour automatique sur
CURRENT_TIMESTAMP
Avoir une gamme de
1970-01-01 00:00:01 UTC
à2038-01-19 03:14:07 UTC
Alors que MySQL datetime :
Ce que vous stockez, c'est ce que vous obtenez ™.
Avoir une gamme de
1000-01-01 00:00:00
à9999-12-31 23:59:59
Les valeurs en dehors de la plage peuvent fonctionner - mais seules les valeurs dans la plage sont garanties de fonctionner.
Vous pouvez stocker des dates où le jour ou le mois est égal à zéro.
C'est la façon MySQL de stocker les anniversaires! Vous ne pouvez pas faire cela avec un
TIMESTAMP
, à la seule exception étant la valeur zéro de0000-00-00
.Vous pouvez stocker des dates non valides, si vous en avez besoin, en mode ALLOW_INVALID_DATES .
Vous pouvez définir la valeur par défaut sur
NOW()
dans certains cas, mais le moyen préférable et plus naturel de dates automatiquement initialisées et mises à jour estTIMESTAMP
.Et bien sûr, il y a aussi
DATE
etTIME
, qui fonctionnent commeDATETIME
, mais bien sûr,DATE
ne se soucient pas du temps etTIME
ne se soucient pas de la date. Les quatre types de données fonctionnent parfaitement avec le large éventail de fonctions de date et d'heure , mais lorsque vous mélangez des types de données, vous devez être conscient des effets de conversion .Maintenant, à votre question: vous devez utiliser
DATETIME
partout. Pas pour des raisons techniques, mais comme vous ne savez toujours pas comment MySQL fonctionne,DATETIME
c'est le choix le plus simple. Cela signifie que vous devrez calculer l'horodatage actuel en PHP avant de le stocker, c'est aussi simple que:La fonction de date de PHP fonctionne comme:
Le
"Y-m-d H:i:s"
format est celui compatible avec MySQL et en laissant le second paramètre vide, lesdate()
appelstime()
pour obtenir l' horodatage UNIX actuel .L'utilisation d'un
TIMESTAMP
au lieu d'unDATETIME
a la valeur ajoutée de MySQL qui assume la responsabilité de décider de l'horodatage actuel, et vous pouvez ignorer le champ lorsque vous insérez / mettez à jour. Mais comme vous envoyez déjà une requête et que le code pour obtenir l'horodatage actuel en PHP est minimal, vous pouvez tout faire en toute sécuritéDATETIME
.En ce qui concerne le code réel pour stocker l'horodatage PHP dans la base de données, vous devriez regarder les objets de données PHP , et si vous n'êtes toujours pas clair, demandez plutôt à StackOverflow . Mais il y a déjà près de 1 500 questions liées , assurez-vous de les parcourir avant de les poser. Juste un indice, les déclarations préparées sont la façon dont les enfants cool le font.
la source
Date
, c'est un mot réservé pour leDATE
type de données et des choses étranges peuvent se produire (selon la version de MySQL), alors essayez de le renommer en quelque chose commecreationdate
et voyez ce qui se passe . De plus, à partir de PHP, vous devez traiter lesTIMESTAMP
champs de la même manière que lesDATETIME
champs, cela n'a pas vraiment d'importance. Leur format est le même.Référence tirée de cet article:
Les principales différences:
TIMESTAMP permet de suivre les modifications apportées aux enregistrements et de les mettre à jour chaque fois que l'enregistrement est modifié. DATETIME utilisé pour stocker une valeur spécifique et statique qui n'est affectée par aucun changement dans les enregistrements.
TIMESTAMP est également affecté par différents paramètres liés à TIME ZONE. DATETIME est constant.
TIMESTAMP a converti en interne le fuseau horaire actuel en UTC pour le stockage, et pendant la récupération, il a été reconverti dans le fuseau horaire actuel. DATETIME ne peut pas faire cela.
Plage prise en charge par TIMESTAMP: '1970-01-01 00:00:01 ′ UTC à' 2038-01-19 03:14:07 'UTC DATETIME plage prise en charge:' 1000-01-01 00:00:00 ′ à '9999 -12-31 23:59:59 ′
la source
Eh bien, je regarde cela de manière très simple. Dans votre cas, j'utiliserais les deux
datetime
ettimestamp
. En utilisant les deux, vous n'aurez aucun problème supplémentaire avec le stockage de données ou quelque chose comme ça. Un champ supplémentaire (colonne) dans votre table n'est pas non plus un gros problème.Donc, selon mon point de vue et mes expériences jusqu'à présent, j'utilise généralement les deux. Lorsque vous souhaitez afficher une date à votre visiteur ou la rendre compréhensible pour les visiteurs, affichez une date au format datetime.
Le format Datetime peut être pénible lorsque vous souhaitez calculer quelque chose (différence entre 2 dates, obtenir la date d'hier de la date actuelle, obtenir il y a 1 semaine de la date actuelle, obtenir la date de demain ou quelque chose comme ça.) Ce n'est pas vraiment difficile, mais vous le ferez généralement besoin de les convertir
timestamp
, puis de faire les choses. Et oui datetime actuel par exemple vous obtenez avec:$current = date("Y-m-d");
ou$current = date("Y-m-d H:i:s");
si vous voulez aussi des heures, des minutes et des secondes.L'horodatage est juste un nombre à 11 chiffres qui ne veut vraiment rien dire. Quand vous le regardez, vous ne saurez pas à quelle date il représente. Il n'est donc pas vraiment convivial et vous ne pouvez pas l'utiliser pour simplement le faire écho et le montrer à vos visiteurs par exemple. Vous devrez le "transformer" en quelque chose de lisible. Mais il vous offre également la possibilité de le convertir facilement et de calculer différentes dates. Par exemple, si vous souhaitez obtenir l'horodatage de demain en même temps, il vous suffit d'ajouter un nombre de secondes à la date actuelle et vous avez l'horodatage de demain. Exemple:
$tomorrow = time()+24*3600;
Vous pouvez également obtenir facilement une différence entre deux dates en quelques secondes ou quelque chose comme ça.Je suggère donc d'utiliser à la fois datetime et timestamp. Même si vous utilisez par exemple PhpMyadmin et que vous souhaitez consulter rapidement certaines données, cela vous sera plus facile lorsque vous verrez une date au format date-heure (exemple
2011-12-20 10:15:20
:) comme ce sera le cas si vous regardez simplement le nombre à 11 chiffres. Alors utilisez les deux puis appelez et utilisez celui qui vous convient le mieux.Si vous devez ou voulez en choisir un seul, je suggère un horodatage, sinon utilisez les deux.
la source
Timestamp is just a number 11 digit long which doesn't really "mean" anything
horodatages MySQL sont stockés dans le même format que datetime. Vous devez également les convertir en horodatages php, pour effectuer les calculs que vous décrivez, OU utilisez simplement les nombreuses fonctions date / heure de MySQL et effectuez les calculs dans la base de données. Votre réponse n'a pas vraiment de sens.