Перетворення часової позначки UNIX у форматовану рядок дати


183

За допомогою PHP я хочу конвертувати часові позначки UNIX у рядки дат, подібні до цього: 2008-07-17T09:24:17Z

Як перетворити мітку часу , такі як 1333699439в 2008-07-17T09:24:17Z?

Відповіді:


321

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

<?php
$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp);
?>

53
Будь ласка, це не gmdate()повертає дату / час у GMT. date()поверне місцеву дату / час.
Метт К

5
Вище коментар не має сенсу в цьому контексті. Використання дати з другим параметром як часової позначки, як показано у відповіді, не надрукує дату в локальному часовому поясі. Дата буде надрукована з ігнорованою інформацією про часовий пояс, оскільки часова марка не містить інформації про часовий пояс. gmdate і дата з другим параметром часової позначки, як 1333699439, буде надрукувати той самий час дати.
Тінус Тейт

1
@MattK: Що має сенс, оскільки Z позначає UTC. Тинус: часові позначки Unix не містять зрушень часового поясу. dateта gmdate's вихід буде відрізнятися залежно від змінної TZ (щонайменше * nix)
Герт ван ден Берг

Ви можете перевірити цей phpzag.com/convert-unix-timestamp-to-readable-date-time-in-php
Laeeq

Було б також непогано, якби ця відповідь включала рішення протилежної проблеми, перетворюючи відформатовану дату в час UNIX.
Olle Härstedt

117

використовувати функцію дати 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
?>

як я можу конвертувати конкретну часову позначку за допомогою "c"? наприклад 1333699439
Утку Далмаз

ця дата не працює ("Ymd \ TH: i: s \ Z", 1333699439) я отримав 2012-04-06EDT04: 03: 59-14400
Utku Dalmaz

@Ahmet - Зверніть увагу на використання подвійних та одинарних лапок при визначенні рядка
Марк Бейкер

1
@ user2060451 все, що передує зворотній косою рисою, відображається як буквальний символ у результаті тимчасового рядка
verbumSapienti

1
@ user2060451: Z повинен вказувати час UTC (у цьому випадку слід використовувати gmdate ...) Перевірте інформацію про ISO8601 на улюбленому ресурсі дослідження.
Герт ван ден Берг

56

Якщо припустити, що ви використовуєте PHP5.3, то сучасний спосіб обробки дат здійснюється через нативний клас DateTime . Щоб отримати поточний час, ви можете просто зателефонувати

$currentTime = new DateTime();

Щоб створити об'єкт DateTime з певної часової позначки (тобто не зараз)

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

Щоб отримати відформатовану рядок, ви можете зателефонувати

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

Дивіться сторінку керівництва тут


1
як я можу конвертувати конкретні часові позначки за допомогою цього? наприклад 1333699439
Утку Далмаз

@Norse Звичайно, я прочитав його пост. Вся інформація, яка йому була потрібна, була в моєму пості. Все, що він повинен був зробити, це прочитати документи PHP для об’єкта DateTime. Я відредагував свій пост, щоб зробити його ще більш зрозумілим. Об'єкт DateTime - це шлях до PHP, і всім новачкам слід рекомендувати його використовувати. Поки що я єдиний, хто надав цю відповідь. До речі, я вважаю ваш коментар трохи агресивним і не зовсім в дусі SO.
лікворчар

@Ahmetvardar Дивіться мою редагування, хоча все це знаходиться в документах PHP, на які я надав посилання. Я настійно закликаю вас почати використовувати об’єкт DateTime. Він надає чудову підтримку дат / час, включаючи часові пояси тощо
лікворка

18

Дуже важливо встановити часовий пояс за замовчуванням, щоб отримати правильний результат

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


2
У ISO8601 Zвикористовується для вказівки, що це час UTC, тому часовий пояс слід встановити наUTC
Герт ван ден Берг

11
<?php
$timestamp=1486830234542;
echo date('Y-m-d H:i:s', $timestamp/1000);
?>

6
Працює без роздільної частини. В іншому випадку дата за замовчуванням - 1970.
Сценарій47,


1

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

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

Вихід був: 2017-03-03T08: 22: 36 + 01: 00

Дуже дякую, що ти відповів, що Стюо був для мене еврикою.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.