получить ISO 8601 с секундами.десятичной долей секунды в php? - PullRequest
9 голосов
/ 27 мая 2011

Я повторяю это:

  php> echo date("Y-m-d\TH:i:s");
      2011-05-27T11:21:23

Как можно с функцией даты получить этот формат даты:

2011-01-12T14:41:35.7042252+01:00 (например)

35.7042252 =>секунд.десятичная дробь секунды

Я пробовал:

php> function getTimestamp()
 ... {
 ...         return date("Y-m-d\TH:i:s") . substr((string)microtime(), 1, 8);
 ... }

php> echo getTimestamp();
2011-05-27T15:34:35.6688370 // missing +01:00 how can I do?

Ответы [ 4 ]

11 голосов
/ 27 мая 2011
date('Y-m-d\TH:i:s.uP')

u для микросекунд было добавлено в PHP 5.2.2. Для более ранних или (все еще) неработающих версий (см. Комментарии):

date('Y-m-d\TH:i:s') . substr(microtime(), 1, 8) . date('P')

Или, чтобы избежать двух звонков на date:

date(sprintf('Y-m-d\TH:i:s%sP', substr(microtime(), 1, 8)))
4 голосов
/ 20 июля 2015

Делая отдельные [дата] звонки, у вас есть небольшая вероятность того, что две метки времени выйдут из строя: например, дата звонка в 1: 29: 22.999999 и миркота в 1: 29: 23.000001. На моем сервере последовательных звонков около 10 нас друг от друга.

Источник

Попробуйте вместо этого:

list($usec, $sec) = explode(" ", microtime());
echo date("Y-m-d\TH:i:s", $sec) . substr($usec, 1, 8) . date("P", $sec);

например:.

2015-07-19T16:59:16.0113674-07:00
4 голосов
/ 11 июля 2013

Лучшая производительность:

substr_replace(date('c'), substr(microtime(), 1, 8), 19, 0);
0 голосов
/ 21 мая 2016

Если анализ строки, возвращенной microtime, вызывает рвоту во рту, и вы не хотите, чтобы в вывод выводились несколько разных временных отметок, вы можете сделать это:

$unow = microtime(true);
sprintf("%s.%06d%s", date("Y-m-d\TH:i:s", $unow), ($unow - floor($unow))*1e6, date("P", $unow));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...