Konwertowanie znacznika czasu UNIX na sformatowany ciąg daty

183

Za pomocą PHP chcę przekonwertować znaczniki czasu UNIX na ciągi dat podobne do tego: 2008-07-17T09:24:17Z

Jak przekonwertować znacznik czasu, taki jak 1333699439na 2008-07-17T09:24:17Z?

Utku Dalmaz
źródło

Odpowiedzi:

321

Spróbuj gmdatetak:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
duszony
źródło
53
Nie gmdate()zwraca to daty / godziny w GMT. date()zwróci lokalną datę / godzinę.
Matt K
5
Powyższy komentarz nie ma sensu w tym kontekście. Użycie daty z drugim parametrem jako znacznikiem czasu, jak pokazano w odpowiedzi, nie spowoduje wydrukowania daty w lokalnej strefie czasowej. Data zostanie wydrukowana z pominięciem informacji o strefie czasowej, ponieważ znacznik czasu nie ma informacji o strefie czasowej. gmdate i data z drugim parametrem znacznika czasu jako 1333699439 wydrukują tę samą datę i godzinę.
Tinus Tate,
1
@MattK: To ma sens, ponieważ Z oznacza UTC. Tinus: Uniksowe znaczniki czasu nie zawierają przesunięć stref czasowych. datei gmdatewyniki będą się różnić w zależności od zmiennej TZ (przynajmniej na * nix)
Gert van den Berg
Byłoby również miło, gdyby ta odpowiedź zawierała rozwiązanie odwrotnego problemu, konwersji sformatowanej daty na czas UNIX.
Olle Härstedt,
117

użyj funkcji daty date ( string $format [, int $timestamp = time() ] )

Użyj date('c',time())jako formatu do konwersji na datę ISO 8601 (dodano w PHP 5) -2012-04-06T12:45:47+05:30

użyj, date("Y-m-d\TH:i:s\Z",1333699439)aby uzyskać2012-04-06T13:33:59Z

Oto niektóre obsługiwane formaty daty

<?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
źródło
jak mogę przekonwertować określony znacznik czasu za pomocą „c”? na przykład 1333699439
Utku Dalmaz
to nie działa data („Ymd \ TH: i: s \ Z”, 1333699439) dostałem 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz
@Ahmet - Zwróć uwagę na użycie podwójnych i pojedynczych cudzysłowów podczas definiowania łańcucha
Mark Baker
1
@ user2060451 wszystko poprzedzone odwrotnym ukośnikiem jest wyświetlane jako literalny znak w wynikowym ciągu czasu
verbumSapienti
1
@ user2060451: Z ma wskazywać czas UTC (w takim przypadku należy użyć gmdate ...) Sprawdź informacje ISO8601 o swoich ulubionych zasobach badawczych.
Gert van den Berg
56

Zakładając, że używasz PHP 5.3, to nowoczesny sposób obsługi dat odbywa się za pośrednictwem rodzimej klasy DateTime . Aby uzyskać aktualny czas, możesz po prostu zadzwonić

$currentTime = new DateTime();

Aby utworzyć obiekt DateTime na podstawie określonego znacznika czasu (tj. Nie teraz)

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

Aby uzyskać sformatowany ciąg, możesz wywołać

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

Zobacz stronę podręcznika tutaj

likier
źródło
1
jak mogę przekonwertować za pomocą tego określony znacznik czasu? na przykład 1333699439
Utku Dalmaz
@Norse Oczywiście, że przeczytałem jego post. Wszystkie potrzebne informacje były w moim poście. Wszystko, co musiał zrobić, to przeczytać dokumenty PHP dla obiektu DateTime. Zredagowałem mój post, aby był jeszcze jaśniejszy. Obiekt DateTime jest sposobem na przejście w PHP i wszyscy nowicjusze powinni być zachęcani do korzystania z niego. Jak dotąd jestem jedynym, który dostarczył tę odpowiedź. Btw Uważam twój komentarz za nieco agresywny i niezupełnie w duchu SO.
Liquorvicar
@Ahmetvardar Zobacz moją edycję, chociaż wszystko to jest w dokumentach PHP, do których podałem link. Gorąco zachęcam do rozpoczęcia korzystania z obiektu DateTime. Zapewnia doskonałe wsparcie dla dat / godzin, w tym stref czasowych itp.
Liquorvicar
18

Bardzo ważne jest ustawienie domyślnej strefy czasowej, aby uzyskać poprawny wynik

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

Pomoc dotycząca konwersji online: http://freeonlinetools24.com/timestamp

klit67
źródło
2
W ISO8601 Zjest używany do wskazania, że ​​jest to czas UTC, więc strefę czasową należy ustawić naUTC
Gert van den Berg
11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>
sunil
źródło
6
Działa bez części podziału. W przeciwnym razie domyślną datą jest 1970.
Script47
6
$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

To powinno zadziałać.

Linus Gudn Jokela
źródło
1

Informacje w tej rozmowie znalazłem tak pomocne, że chciałem tylko dodać, jak to wymyśliłem, korzystając ze znacznika czasu z mojej bazy danych MySQL i małego PHP

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

Dane wyjściowe: 2017-03-03T08: 22: 36 + 01: 00

Bardzo dziękuję Stewe, że odpowiedź była dla mnie eureką.

Samuel Ramzan
źródło
0

Możesz zrobić jak .....

$originalDate = "1585876500";

echo $newDate = date("Y-m-d h:i:sa", date($originalDate));
Abhishek Gupta
źródło