Existe-t-il une fonction PHP qui renvoie la date et l'heure au même format que la fonction MySQL NOW()
?
Je sais comment faire en utilisant date()
, mais je demande s'il existe une fonction uniquement pour cela.
Par exemple, pour retourner:
2009-12-01 00:00:00
Pas d'ailleurs:
date("Y-m-d H:i:s");
date('Y-m-d H:i:s')
Regardez ici pour plus de détails: http://pl.php.net/manual/en/function.date.php
Avec PHP version> = 5.4 DateTime peut le faire: -
echo (new \DateTime())->format('Y-m-d H:i:s');
Utilisez cette fonction:
function getDatetimeNow() {
$tz_object = new DateTimeZone('Brazil/East');
//date_default_timezone_set('Brazil/East');
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
return $datetime->format('Y\-m\-d\ h:i:s');
}
Essaye ça:
date("Y-m-d H:i:s");
Je cherchais la même réponse et je propose cette solution pour PHP 5.3 ou une version ultérieure:
$dtz = new DateTimeZone("Europe/Madrid"); //Your timezone
$now = new DateTime(date("Y-m-d"), $dtz);
echo $now->format("Y-m-d H:i:s");
La fonction MySQL NOW()
renvoie l'horodatage actuel. Le seul moyen que j'ai trouvé pour PHP consiste à utiliser le code suivant.
$curr_timestamp = date('Y-m-d H:i:s');
Une autre réponse que je trouve facile à utiliser:
echo date('c');
// 2015-07-27T00:00:00+02:00
Ceci est la date ISO 8601 (ajoutée dans PHP 5) que MySQL utilise
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 , tout devrait bien se passer. 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, seul 2015-07-27T00:00:00
sera stocké (mais l'heure locale est correcte!).
Quand je charge le temps en PHP,
$importedDate = new \DateTime('2015-07-27T00:00:00')
il supposera automatiquement que c'est +02:00
fuseau horaire puisqu'il s'agit du réglage par défaut. L'impression sera à nouveau correcte:
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
date_default_timezone_set('UTC');
$importedDate = new \DateTime('2015-07-27T00:00:00+02:00');
echo $importedDate->format('c');
// 2015-07-27T00:00:00+02:00
$importedDate->setTimezone(new \DateTimeZone("America/New_York"));
echo $importedDate->format('c');
// 2015-07-26T18:00:00-04:00
Ou vous pouvez utiliser constantes DateTime
:
echo date(DateTime::W3C); // 2005-08-15T15:52:01+00:00
En voici la liste:
ATOM = "Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00
COOKIE = "l, d-M-Y H:i:s T" ; // -> Monday, 15-Aug-2005 15:52:01 UTC
ISO8601 = "Y-m-d\TH:i:sO" ; // -> 2005-08-15T15:52:01+0000
RFC822 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000
RFC850 = "l, d-M-y H:i:s T" ; // -> Monday, 15-Aug-05 15:52:01 UTC
RFC1036 = "D, d M y H:i:s O" ; // -> Mon, 15 Aug 05 15:52:01 +0000
RFC1123 = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC2822 = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
RFC3339 = "Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00 ( == ATOM)
RFC3339_EXTENDED = "Y-m-d\TH:i:s.vP" ; // -> 2005-08-15T15:52:01.000+00:00
RSS = "D, d M Y H:i:s O" ; // -> Mon, 15 Aug 2005 15:52:01 +0000
W3C = "Y-m-d\TH:i:sP" ; // -> 2005-08-15T15:52:01+00:00
Pour le débogage, je préfère un plus court cependant ( v4l.org ):
echo date('ymd\THisP'); // 180614T120708+02:00
J'aime la solution publiée par user1786647 et je l'ai légèrement mise à jour pour changer le fuseau horaire en argument de fonction et ajouter une prise en charge facultative permettant de passer une chaîne de date/heure Unix à utiliser pour l'horodatage renvoyé.
Il inclut également une solution de secours pour "setTimestamp" pour les utilisateurs exécutant une version antérieure à PHP 5.3:
function DateStamp($strDateTime = null, $strTimeZone = "Europe/London") {
$objTimeZone = new DateTimeZone($strTimeZone);
$objDateTime = new DateTime();
$objDateTime->setTimezone($objTimeZone);
if (!empty($strDateTime)) {
$fltUnixTime = (is_string($strDateTime)) ? strtotime($strDateTime) : $strDateTime;
if (method_exists($objDateTime, "setTimestamp")) {
$objDateTime->setTimestamp($fltUnixTime);
}
else {
$arrDate = getdate($fltUnixTime);
$objDateTime->setDate($arrDate['year'], $arrDate['mon'], $arrDate['mday']);
$objDateTime->setTime($arrDate['hours'], $arrDate['minutes'], $arrDate['seconds']);
}
}
return $objDateTime->format("Y-m-d H:i:s");
}
Vous pouvez utiliser la fonction PHP date avec le format correct comme paramètre,
echo date("Y-m-d H:i:s");
Il n'y a pas de fonction intégrée PHP now()
, mais vous pouvez le faire à l'aide de date()
.
Exemple
function now() {
return date('Y-m-d H:i:s');
}
Vous pouvez utiliser date_default_timezone_set()
si vous devez modifier le fuseau horaire.
Sinon, vous pouvez utiliser Carbon - Une simple extension d'API PHP pour DateTime.
L'équivalent PHP est time()
: http://php.net/manual/en/function.time.php