Konvertieren eines UNIX-Zeitstempels in eine formatierte Datumszeichenfolge

183

Mit PHP möchte ich UNIX-Zeitstempel in ähnliche Datumszeichenfolgen konvertieren: 2008-07-17T09:24:17Z

Wie konvertiere ich einen Zeitstempel wie 1333699439in 2008-07-17T09:24:17Z?

Utku Dalmaz
quelle

Antworten:

320

Versuchen Sie es gmdateso:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
Stewe
quelle
53
Bitte nicht, dass gmdate()das Datum / die Uhrzeit in GMT zurückgegeben wird. date()gibt das lokale Datum / die lokale Uhrzeit zurück.
Matt K
5
Der obige Kommentar macht in diesem Zusammenhang keinen Sinn. Wenn Sie das Datum mit dem zweiten Parameter als Zeitstempel verwenden, wie in der Antwort gezeigt, wird das Datum nicht in der lokalen Zeitzone gedruckt. Das Datum wird mit ignorierten Zeitzoneninformationen gedruckt, da der Zeitstempel keine Zeitzoneninformationen enthält. gmdate und date mit dem zweiten Zeitstempelparameter 1333699439 geben dieselbe Datums- und Uhrzeitangabe aus.
Tinus Tate
1
@MattK: Was Sinn macht, da Z UTC anzeigt. Tinus: Unix-Zeitstempel enthalten keine Zeitzonenversätze. dateund gmdate's Ausgabe wird basierend auf der TZ-Variablen unterschiedlich sein (mindestens auf * nix)
Gert van den Berg
Es wäre auch schön, wenn diese Antwort die Lösung für das gegenteilige Problem enthalten würde, nämlich das Konvertieren eines formatierten Datums in UNIX-Zeit.
Olle Härstedt
117

Verwenden Sie die Datumsfunktion date ( string $format [, int $timestamp = time() ] )

Verwenden Sie date('c',time())als Format ISO 8601 (hinzugefügt in PHP 5) zu konvertieren -2012-04-06T12:45:47+05:30

verwenden date("Y-m-d\TH:i:s\Z",1333699439), um zu bekommen2012-04-06T13:33:59Z

Hier sind einige der Formate, die die Datumsfunktion unterstützt

<?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
quelle
Wie kann ich einen bestimmten Zeitstempel mit 'c' konvertieren? Zum Beispiel 1333699439
Utku Dalmaz
Dies funktioniert nicht Datum ("Ymd \ TH: i: s \ Z", 1333699439) Ich habe 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz
@Ahmet - Beachten Sie die Verwendung von doppelten und einfachen Anführungszeichen bei der Definition der Zeichenfolge
Mark Baker
1
@ user2060451 alles, was ein Backslash vorangestellt ist, wird als
Literalzeichen
1
@ user2060451: Z soll die UTC-Zeit angeben (in diesem Fall sollte gmdate verwendet werden ...). Lesen Sie die ISO8601-Informationen zu Ihrer bevorzugten Forschungsressource.
Gert van den Berg
56

Angenommen, Sie verwenden PHP5.3, dann erfolgt die moderne Art der Datumsverarbeitung über die native DateTime-Klasse . Um die aktuelle Uhrzeit zu erhalten, können Sie einfach anrufen

$currentTime = new DateTime();

So erstellen Sie ein DateTime-Objekt aus einem bestimmten Zeitstempel (dh nicht jetzt)

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

Um eine formatierte Zeichenfolge zu erhalten, können Sie diese aufrufen

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

Siehe die Handbuchseite hier

Liquorvicar
quelle
1
Wie kann ich damit einen bestimmten Zeitstempel konvertieren? Zum Beispiel 1333699439
Utku Dalmaz
@Norse Natürlich habe ich seinen Beitrag gelesen. Alle Informationen, die er brauchte, waren in meinem Beitrag. Er musste lediglich die PHP-Dokumente für das DateTime-Objekt lesen. Ich habe meinen Beitrag bearbeitet, um ihn noch klarer zu gestalten. Das DateTime-Objekt ist der richtige Weg in PHP und alle Neulinge sollten ermutigt werden, es zu verwenden. Bis jetzt bin ich der einzige, der diese Antwort gegeben hat. Übrigens finde ich Ihren Kommentar etwas aggressiv und nicht ganz im Sinne von SO.
Liquorvicar
@Ahmetvardar Siehe meine Bearbeitung, obwohl dies alles in den PHP-Dokumenten steht, zu denen ich einen Link bereitgestellt habe. Ich empfehle Ihnen dringend, das DateTime-Objekt zu verwenden. Es bietet eine hervorragende Unterstützung für Daten / Zeiten einschließlich Zeitzonen usw.
Liquorvicar
18

Es ist sehr wichtig, eine Standardzeitzone festzulegen, um das richtige Ergebnis zu erhalten

<?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);
?> 

Online-Konvertierungshilfe: http://freeonlinetools24.com/timestamp

klit67
quelle
2
In ISO8601 Zwird verwendet, um anzuzeigen, dass es eine UTC-Zeit ist, daher sollte die Zeitzone aufUTC
Gert van den Berg
11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
sunil
quelle
6
Funktioniert ohne den Teil zum Teilen. Andernfalls ist das Datum standardmäßig 1970.
Script47
6
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

Das sollte funktionieren.

Linus Gudn Jokela
quelle
1

Ich fand die Informationen in dieser Konversation so hilfreich, dass ich nur hinzufügen wollte, wie ich sie mithilfe des Zeitstempels aus meiner MySQL-Datenbank und ein wenig PHP herausgefunden habe

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

Die Ausgabe war: 2017-03-03T08: 22: 36 + 01: 00

Vielen Dank Stewe, du antwortest, war eine Eureka für mich.

Samuel Ramzan
quelle
0

Sie können wie tun .....

$originalDate = "1585876500";

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