Преобразование метки времени UNIX в форматированную строку даты

Используя PHP, я хочу преобразовать временные метки UNIX в строки даты, подобные этой: 2008-07-17T09:24:17Z

Как преобразовать метку времени, например 1333699439, в 2008-07-17T09:24:17Z?


person Utku Dalmaz    schedule 06.04.2012    source источник


Ответы (9)


Попробуйте gmdate вот так:

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>
person stewe    schedule 06.04.2012
comment
Обратите внимание, что gmdate() возвращает дату / время в формате GMT. date() вернет местную дату / время. - person Matt K; 10.12.2015
comment
Приведенный выше комментарий не имеет смысла в этом контексте. Использование даты со вторым параметром в качестве отметки времени, как показано в ответе, не приведет к печати даты в местном часовом поясе. Дата будет напечатана с игнорированием информации о часовом поясе, потому что метка времени не содержит информации о часовом поясе. gmdate и дата со вторым параметром отметки времени 1333699439 напечатают ту же дату и время. - person Tinus Tate; 07.04.2016
comment
@MattK: Это имеет смысл, поскольку Z указывает на всемирное координированное время. Tinus: временные метки Unix не содержат смещения часовых поясов. Вывод date и gmdate будет отличаться в зависимости от переменной TZ (по крайней мере, на * nix) - person Gert van den Berg; 03.05.2016
comment
Вы можете проверить это phpzag.com/convert -unix-timestamp-to-readable-date-time-in-php - person Laeeq; 04.05.2017
comment
Также было бы неплохо, если бы этот ответ включал решение противоположной проблемы, преобразовывая форматированную дату во время UNIX. - person Olle Härstedt; 14.09.2018
comment
PHP v5.6 генерирует из отметки времени 1540426286647 - ›50784-03-01, но должно быть 2018-10-25. При использовании gmdate ('Y-m-d', $ lastmodifieddate_ts); - person Kaspar L. Palgi; 25.10.2018
comment
@ KasparL.Palgi. Чтобы получить правильный год, вам нужно разделить временную метку на 1000, поскольку эта временная метка хранится в миллисекундах. - person Wadih M.; 01.07.2020

использовать функцию даты date ( string $format [, int $timestamp = time() ] )

Используйте date('c',time()) в качестве формата для преобразования в дату ISO 8601 (добавлено в PHP 5) - 2012-04-06T12:45:47+05:30

используйте date("Y-m-d\TH:i:s\Z",1333699439), чтобы получить 2012-04-06T13:33:59Z

Вот некоторые из форматов, которые поддерживает функция даты.

<?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
?>
person Sandeep Manne    schedule 06.04.2012
comment
как я могу преобразовать конкретную временную метку с помощью 'c'? например 1333699439 - person Utku Dalmaz; 06.04.2012
comment
эта дата не работает (Y-m-d \ TH: i: s \ Z, 1333699439), я получил 2012-04-06EDT04: 03: 59-14400 - person Utku Dalmaz; 06.04.2012
comment
@Ahmet - Обратите внимание на использование двойных и одинарных кавычек при определении строки - person Mark Baker; 06.04.2012
comment
Спасибо за подробный ответ. Просто вопросы: дата (Y-m-d \ TH: i: s \ Z, 1333699439), чтобы получить 2012-04-06T13: 33: 59Z --- Что это за T и Z? Я полагаю, T для времени, а Z для? Еще раз спасибо. - person user2060451; 27.11.2013
comment
@ user2060451 все, перед которым стоит обратная косая черта, отображается как буквальный символ в результирующей строке времени - person verbumSapienti; 25.01.2015
comment
@ user2060451: Z должен указывать время UTC (в этом случае следует использовать gmdate ...). Ознакомьтесь с информацией ISO8601 на вашем любимом исследовательском ресурсе. - person Gert van den Berg; 03.05.2016

Предполагая, что вы используете PHP5.3, современный способ обработки дат - через собственный класс DateTime. Чтобы узнать текущее время, вы можете просто позвонить

$currentTime = new DateTime();

Чтобы создать объект DateTime из определенной отметки времени (т.е. не сейчас)

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

Чтобы получить отформатированную строку, вы можете затем вызвать

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

См. страницу руководства здесь

person liquorvicar    schedule 06.04.2012
comment
как я могу преобразовать конкретную временную метку с этим? например 1333699439 - person Utku Dalmaz; 06.04.2012
comment
@Norse Конечно, я читал его пост. Вся необходимая информация была в моем посте. Все, что ему нужно было сделать, это прочитать документацию PHP для объекта DateTime. Я отредактировал свой пост, чтобы было еще понятнее. Объект DateTime - это путь к PHP, и всем новичкам следует поощрять его использование. Пока что я единственный, кто дал такой ответ. Кстати, я нахожу ваш комментарий немного агрессивным и не совсем в духе SO. - person liquorvicar; 06.04.2012
comment
@Ahmetvardar См. Мою правку, хотя все это есть в документации PHP, на которую я дал ссылку. Я настоятельно рекомендую вам начать использовать объект DateTime. Он обеспечивает отличную поддержку даты / времени, включая часовые пояса и т. Д. - person liquorvicar; 06.04.2012

Очень важно установить часовой пояс по умолчанию, чтобы получить правильный результат.

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

Справка по преобразованию в Интернете: http://freeonlinetools24.com/timestamp

person klit67    schedule 06.04.2015
comment
В ISO8601 Z используется, чтобы указать, что это время в формате UTC, поэтому часовой пояс должен быть установлен на UTC. - person Gert van den Berg; 03.05.2016

$unixtime_to_date = date('jS F Y h:i:s A (T)', $unixtime);

Это должно работать.

person Linus Gudn Jokela    schedule 03.12.2012

Класс DateTime принимает строку в конструкторе. Если вы добавите к метке времени префикс @ -символа, вы создадите объект DateTime с меткой времени. Для форматирования используйте формат 'c' ... предопределенный составной формат ISO 8601.

Если бы можно было использовать класс DateTime вот так ... установите правильный часовой пояс или оставьте его, если вам нужно время в формате UTC.

$dt = new DateTime('@1333699439');
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo $dt->format('c');
person Team EJ    schedule 22.09.2020

Я нашел информацию в этом разговоре настолько полезной, что просто хотел добавить, как я это понял, используя временную метку из моей базы данных MySQL и немного PHP

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

Результат был: 2017-03-03T08: 22: 36 + 01: 00

Большое спасибо, Стив, что ты ответила, для меня была эврика.

person Samuel Ramzan    schedule 03.03.2017

Вы можете сделать как .....

$originalDate = "1585876500";

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

person    schedule
comment
Работает без разделительной части. В противном случае дата по умолчанию - 1970 год. - person Script47; 29.04.2018
comment
Это работает на меня. Идк, почему другие говорят, что это не работает. Вероятно, потому что я использую PHP7.2? - person Lapiz the Programmer; 01.03.2021
comment
@LapiztheProgrammer да, это зависит от версий PHP - person sunil; 02.03.2021
comment
Я получаю значение из внешнего API, оно выглядит так: «1623923723000». В этом случае разделительная часть необходима для получения правильной даты: «2021-06-17 11:55:23». Спасибо, что поделились решением. - person WojCup; 17.06.2021