web-dev-qa-db-fra.com

PHP Conversion d'entier en date, l'inverse de strtotime

<?php
echo strtotime("2014-01-01 00:00:01")."<hr>";
// output is 1388516401
?>

Je suis surpris si cela peut être inversé. Je veux dire, je peux convert 1388516401 to 2014-01-01 00:00:01. Ce que je veux savoir, c’est quelle est la logique derrière cette conversion. Comment php convertit la date en un entier spécifique.

12
Wasim A.

Oui, vous pouvez le reconvertir. Tu peux essayer:

date("Y-m-d H:i:s", 1388516401);

La logique derrière cette conversion de date en un entier est expliquée dans strtotime en PHP:

La fonction s'attend à recevoir une chaîne contenant un format de date anglais et essaiera d'analyser ce format dans un horodatage Unix (le nombre de secondes depuis le 1er janvier 1970 à 00:00:00 UTC), par rapport à l'horodatage donné maintenant, ou l'heure actuelle si maintenant n'est pas fournie.

Par exemple, strtotime("1970-01-01 00:00:00") vous donne 0 et strtotime("1970-01-01 00:00:01") vous donne 1.

Cela signifie que si vous imprimez strtotime("2014-01-01 00:00:01"), ce qui vous donnera le 1388516401 en sortie, la date 2014-01-01 00:00:01 est donc 1,388,516,401 secondes après le 1er janvier 1970 00:00:00 UTC.

35
Sabari

Pouvez-vous essayer ceci,

echo date("Y-m-d H:i:s", 1388516401);

Comme indiqué par theGame ,

Cela signifie que vous transmettez une valeur de chaîne pour l'heure et éventuellement une valeur pour l'heure actuelle, qui est un horodatage UNIX. La valeur renvoyée est un entier représentant un horodatage UNIX.

echo strtotime("2014-01-01 00:00:01");

Cela retournera dans la valeur 1388516401, qui est l'horodatage UNIX pour la date 2014-01-01. Ceci peut être confirmé en utilisant la fonction date () comme ci-dessous:

echo date('Y-m-d', 1198148400); // echos 2014-01-01
10
Krish R

Je suppose que vous vous demandez pourquoi 1388516401 est égal à 2014-01-01 ...?

Il y a une raison historique à cela. Il existe une variable entière sur 32 bits, appelée time_t, qui conserve le compte du temps écoulé depuis le 1970-01-01 00:00:00. Sa valeur exprime le temps en secondes. Cela signifie que dans 2014-01-01 00:00:01time_t sera égal à 1388516401.

Cela nous amène certainement à un autre fait intéressant ... Dans 2038-01-19 03:14:07time_t atteindra 2147485547, la valeur maximale pour un nombre de 32 bits. Jamais entendu parler de John Titor et du problème de l’Année 2038 ? :RÉ

4
Vereos

La fonction time () affiche les secondes entre maintenant et l’époque unix, 01 01 1970 (00:00:00 GMT). Strtotime () transforme un format de date normal en un format time (). La représentation de cette date en secondes sera donc: 1388516401 

Source: http://www.php.net/time

0
SpiderLinked