Conversion d'un horodatage UNIX en chaîne de date formatée

189

En utilisant PHP, je souhaite convertir les horodatages UNIX en chaînes de date similaires à ceci: 2008-07-17T09:24:17Z

Comment puis-je convertir un horodatage tel que 1333699439en 2008-07-17T09:24:17Z?

Utku Dalmaz
la source

Réponses:

325

Essayez gmdatecomme ceci:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
ragoût
la source
55
Veuillez noter que gmdate()renvoie la date / heure en GMT. date()renverra la date / heure locale.
Matt K
5
Le commentaire ci-dessus n'a pas de sens dans ce contexte. L'utilisation de la date avec le deuxième paramètre comme horodatage, comme indiqué dans la réponse, n'imprimera pas la date dans le fuseau horaire local. La date sera imprimée avec les informations de fuseau horaire ignorées, car l'horodatage n'a pas d'informations sur le fuseau horaire. gmdate et date avec le deuxième paramètre d'horodatage comme 1333699439 imprimeront la même date et heure.
Tinus Tate
1
@MattK: Ce qui a du sens, puisque Z indique UTC. Tinus: les horodatages Unix ne contiennent pas de décalages de fuseau horaire. dateet gmdatela sortie différera en fonction de la variable TZ (au moins sur * nix)
Gert van den Berg
1
@ KasparL.Palgi Vous devrez diviser l'horodatage par 1000 pour obtenir l'année correcte, car cet horodatage est stocké en millisecondes.
Wadih M.
119

utiliser la fonction de date date ( string $format [, int $timestamp = time() ] )

Utiliser date('c',time())comme format pour convertir en date ISO 8601 (ajouté dans PHP 5) -2012-04-06T12:45:47+05:30

utiliser date("Y-m-d\TH:i:s\Z",1333699439)pour obtenir2012-04-06T13:33:59Z

Voici quelques-uns des formats pris en charge par la fonction de date

<?php
$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$today = date("H:i:s");                         // 17:16:18
?>
Sandeep Manne
la source
comment puis-je convertir un horodatage spécifique avec 'c'? par exemple 1333699439
Utku Dalmaz
cette date ne fonctionne pas ("Ymd \ TH: i: s \ Z", 1333699439) j'ai eu 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz
@Ahmet - Notez l'utilisation de guillemets doubles et simples lors de la définition de la chaîne
Mark Baker
1
@ user2060451 tout ce qui est précédé d'une barre oblique inverse est affiché comme caractère littéral dans la chaîne de temps résultante
verbumSapienti
1
@ user2060451: Z est censé indiquer l'heure UTC (auquel cas gmdate doit être utilisé ...) Consultez les informations ISO8601 sur votre ressource de recherche préférée.
Gert van den Berg
58

En supposant que vous utilisez PHP5.3, la manière moderne de gérer les dates est via la classe native DateTime . Pour obtenir l'heure actuelle, vous pouvez simplement appeler

$currentTime = new DateTime();

Pour créer un objet DateTime à partir d'un horodatage spécifique (c'est-à-dire pas maintenant)

$currentTime = DateTime::createFromFormat( 'U', $timestamp );

Pour obtenir une chaîne formatée, vous pouvez ensuite appeler

$formattedString = $currentTime->format( 'c' );

Voir la page de manuel ici

liqueur
la source
1
comment puis-je convertir un horodatage spécifique avec cela? par exemple 1333699439
Utku Dalmaz
@Norse Bien sûr, j'ai lu son message. Toutes les informations dont il avait besoin se trouvaient dans mon message. Tout ce qu'il avait à faire était de lire la documentation PHP de l'objet DateTime. J'ai modifié mon message pour le rendre encore plus clair. L'objet DateTime est la voie à suivre en PHP et tous les débutants doivent être encouragés à l'utiliser. Pour l'instant, je suis le seul à avoir fourni cette réponse. D'ailleurs, je trouve votre commentaire un peu agressif et pas tout à fait dans l'esprit de SO.
liquorvicar
@Ahmetvardar Voir ma modification bien que tout cela se trouve dans la documentation PHP vers laquelle j'ai fourni un lien. Je vous conseille vivement de commencer à utiliser l'objet DateTime. Il fournit un excellent support pour les dates / heures, y compris les fuseaux horaires, etc.
liquorvicar
19

Il est très important de définir un fuseau horaire par défaut pour obtenir le résultat correct

<?php
// set default timezone
date_default_timezone_set('Europe/Berlin');

// timestamp
$timestamp = 1307595105;

// output
echo date('d M Y H:i:s Z',$timestamp);
echo date('c',$timestamp);
?> 

Aide à la conversion en ligne: http://freeonlinetools24.com/timestamp

klit67
la source
2
Dans ISO8601, Zest utilisé pour indiquer qu'il s'agit d'une heure UTC, le fuseau horaire doit donc être réglé surUTC
Gert van den Berg
12
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
Sunil
la source
6
Fonctionne sans la partie de division. Sinon, la date par défaut est 1970.
Script47
6
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

Cela devrait fonctionner.

Linus Gudn Jokela
la source
1

J'ai trouvé les informations de cette conversation si utiles que je voulais juste ajouter comment je les ai trouvées en utilisant l'horodatage de ma base de données MySQL et un peu de PHP

 <?= date("Y-m-d\TH:i:s\+01:00",strtotime($column['loggedin'])) ?>

La sortie était: 2017-03-03T08: 22: 36 + 01: 00

Merci beaucoup Stewe vous répondez était un eureka pour moi.

Samuel Ramzan
la source
1

La classe DateTime prend une chaîne dans le constructeur. Si vous préfixez l'horodatage avec un @ -character, vous créez un objet DateTime avec l'horodatage. Pour le formatage, utilisez le format «c» ... un format composé ISO 8601 prédéfini.

Si vous pouvez utiliser la classe DateTime comme ceci ... définissez le bon fuseau horaire ou laissez-le de côté si vous voulez une heure UTC.

$dt = new DateTime('@1333699439');
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo $dt->format('c');
Équipe EJ
la source
0

Vous pouvez faire comme .....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Abhishek Gupta
la source