web-dev-qa-db-fra.com

NOW () fonction dans PHP

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
451
MoeAmine

Pas d'ailleurs:

date("Y-m-d H:i:s");
952
troelskn
date('Y-m-d H:i:s')

Regardez ici pour plus de détails: http://pl.php.net/manual/en/function.date.php

137
hsz

Avec PHP version> = 5.4 DateTime peut le faire: -

echo (new \DateTime())->format('Y-m-d H:i:s');

Voir cela fonctionne .

106
vascowhite

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');
}
33
user1786647

Essaye ça:

date("Y-m-d H:i:s");
24
streetparade

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");
15
santi

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');
15
Shriganesh Shintre

Utilisez strftime :

strftime("%F %T");
  • %F est identique à %Y-%m-%d.

  • %T est identique à %H:%M:%S.

Voici ne démo sur ideone.

14
user669677

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

Modifier

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

Pour plus de sécurité, utilisez toujours UTC sur le serveur, spécifiez-le dans MySQL et PHP, puis convertissez-le uniquement en paramètres régionaux de votre utilisateur lors de l'affichage de la date:

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
14
Richard87

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
11
CPHPython

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");
}
5
Seth

Vous pouvez utiliser la fonction PHP date avec le format correct comme paramètre,

echo date("Y-m-d H:i:s");
5
Som

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.

0
RAZIUL

L'équivalent PHP est time(): http://php.net/manual/en/function.time.php

0
Marco Marsala