Перетворення часової позначки 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.