Existe-t-il une fonction PHP qui retourne la date et l'heure au même format que la fonction MySQL NOW()
?
Je sais comment le faire en utilisant date()
, mais je demande s'il y a une fonction uniquement pour cela.
Par exemple, pour retourner:
2009-12-01 00:00:00
Réponses:
Outre la fonction date :
la source
date_default_timezone_set
fonctionRegardez ici pour plus de détails: http://pl.php.net/manual/en/function.date.php
la source
Avec la version PHP> = 5.4, DateTime peut le faire: -
Voyez-le fonctionner .
la source
Utilisez cette fonction:
la source
Essaye ça:
la source
Réponse courte
Lisez ci-dessous pour la réponse longue.
Le mimétisme de la fonction MySQL NOW () en PHP
Voici une liste de façons en PHP qui imitent la
NOW()
fonction MySQL .Je pense que
date_create()->format('Y-m-d H:i:s')
c'est la meilleure façon parce que cette approche vous permet de gérer plus facilement les manipulations temps / fuseau horairedate('Y-m-d H:i:s')
et cela fonctionne depuis php 5.2.Fonction MySQL NOW ()
La fonction MySQL
NOW()
donne la valeur dateTime dans ce format:'YYYY-MM-DD HH:MM:SS'
. Voir ici: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now .Un fait intéressant est qu'il est possible d'obtenir le format datetime en exécutant cette requête:,
SHOW VARIABLES LIKE 'd%e_format'
le résultat pourrait être quelque chose comme ceci:Les variables ici sont des variables en lecture seule. Vous ne pouvez donc pas le changer.
Je suppose que la
NOW()
fonction MySQL obtient son format à partir de ladatetime_format
variable.Les avantages de date_create () -> format () à la place du résumé date ()
Les faits favorables de
date_create('now')->format('Y-m-d H:i:s')
plusdate('Y-m-d H:i:s')
sont:Les inconvénients de date_create () -> format () à la place de date ()
La fonction
date()
a une performance légèrement meilleure quedate_create()->format()
. Voir test de référence ci-dessous.Les majuscules montrent que
date()
c'est plus rapide. Cependant, si nous modifions un peu le scénario de test, le résultat sera différent. Voir ci-dessous:La méthode DateTime:
format()
est plus rapide ici quedate()
.Les avantages de date_create () -> format () au lieu de date () détaillés
Lisez la suite pour l'explication détaillée.
plus facile à gérer les manipulations de temps
date_create()
accepte un format de date / heure relatif (commenow
,yesterday
ou+1 day
) voir ce lien , exemple:date()
accepte également un format de date / heure relatif, comme ceci:plus facile à gérer les fuseaux horaires
Lorsque les fuseaux horaires sont importants, l'utilisation de
date_create()->format()
a beaucoup plus de sens quedate()
parce qu'ildate()
utilise le fuseau horaire par défaut configuré dansphp.ini
ladate.timezone
directive. Lien: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .Il est possible de modifier le fuseau horaire pendant l'exécution. Exemple:
date_default_timezone_set('Asia/Tokyo');
.L'inconvénient est que cela affectera toutes les fonctions de date / heure. Ce problème n'existe pas si vous utilisez
date_create()->format()
en combinaison avectimezone_open()
.PHP prend en charge les principaux fuseaux horaires. Le plus drôle, c'est qu'il supporte même le cercle arctique et l'Antarctique. En avez-vous déjà entendu parler
Longyearbyen
? Sinon, ne vous inquiétez pas, moi non plus jusqu'à ce que je lise la documentation PHP officielle.Consultez la liste de tous les fuseaux horaires pris en charge: http://php.net/manual/en/timezones.php .
oop
La POO utilise des objets à état complet. Je préfère donc penser de cette façon:
Alors penser de cette façon:
Par conséquent, je dirais que l'
date_create()->format()
approche est alors plus lisible pour moidate()
.date_create () VS new DateTime ()
Les faits favorables de
date_create()
plusnew DateTime()
sont:Espaces de noms
Si vous travaillez dans un espace de noms et que vous souhaitez initialiser un objet DateTime avec le nouveau mot-clé, vous devez le faire comme ceci:
Il n'y a rien de mal à cela, mais l'inconvénient de ce qui précède est que les gens oublient sporadiquement la contre-oblique. En utilisant le
date_create()
fonction constructeur, vous n'avez pas à vous soucier des espaces de noms.Exemple de date_create () -> format ()
J'utilise cette approche pour mes projets si je dois remplir un tableau. Comme ça:
la source
Je cherchais la même réponse, et j'ai trouvé cette solution pour PHP 5.3 ou version ultérieure:
la source
La fonction MySQL
NOW()
renvoie l'horodatage actuel. Le seul moyen que j'ai trouvé pour PHP est d'utiliser le code suivant.la source
Une autre réponse que je trouve facile à utiliser:
Il s'agit de la date ISO 8601 (ajoutée en PHP 5) que MySQL utilise
Éditer
MySQL 5.7 n'autorise pas le fuseau horaire dans le datetime par défaut. Vous pouvez désactiver l'erreur avec
SQL_MODE=ALLOW_INVALID_DATES
. Voir la réponse ici pour plus de détails: https://stackoverflow.com/a/35944059/2103434 .Mais cela signifie également que le fuseau horaire sera perdu lors de l'enregistrement dans la base de données!Par défaut, MySQL utilise le fuseau horaire du système, et tant que PHP utilise le même fuseau horaire vous devriez être d'accord. Dans mon cas, CET / UTC + 2.
Cela signifie que si j'insère
2015-07-27T00:00:00+02:00
dans la base de données, seul2015-07-27T00:00:00
sera stocké (mais c'est l'heure locale correcte!).Quand je charge le temps en PHP,
il supposera automatiquement qu'il s'agit du
+02:00
fuseau horaire car il s'agit de la valeur par défaut. L'impression sera à nouveau correcte:Pour être sûr, utilisez toujours UTC sur le serveur, spécifiez-le dans MySQL et PHP, puis convertissez-le uniquement aux paramètres régionaux de votre utilisateur lors de l'affichage de la date:
la source
Utilisation
strftime
:%F
est le même que%Y-%m-%d
.%T
est le même que%H:%M:%S
.Voici une démo sur ideone.
la source
Ou vous pouvez utiliser des
DateTime
constantes :En voici la liste:
Pour le débogage, je préfère une version plus courte ( 3v4l.org ):
la source
J'aime la solution publiée par user1786647, et je l'ai mise à jour un peu pour changer le fuseau horaire en argument de fonction et ajouter une prise en charge facultative pour passer soit une heure Unix soit une chaîne datetime à utiliser pour l'estampille renvoyée.
Il inclut également une solution de rechange pour "setTimestamp" pour les utilisateurs exécutant une version inférieure à PHP 5.3:
la source
Vous pouvez utiliser la fonction de date PHP avec le format correct comme paramètre,
la source
Il n'y a pas de
now()
fonction PHP intégrée, mais vous pouvez le faire en utilisantdate()
.Exemple
Vous pouvez utiliser
date_default_timezone_set()
si vous devez modifier le fuseau horaire.Sinon, vous pouvez utiliser Carbon - Une simple extension API PHP pour DateTime.
la source
Si vous voulez avoir du temps maintenant, y compris AM / PM
Il sort
2020-05-01 05:45:28 pm
ou
Il sort
2020-05-01 05:45:28 PM
la source
prochainement
php advanced now class extra addMinute addYear as such addHour etc ...
en utilisant
la source
L'équivalent PHP est
time()
: http://php.net/manual/en/function.time.phpla source
time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).