Создать 3 цифры Миллисекунды с php - PullRequest
6 голосов
/ 11 февраля 2012

У меня есть 13-значное число, и я хочу создать дату и время с помощью include милисекунды

Пример кода такой: это мой скрипт php

$mil = 1328910295939;
$seconds = $mil / 1000;
$showdate = date('Y:m:d H:i:s', $seconds) ;

echo "$showdate";

результат примерно такой: 2012:02:10 15: 44: 55.xxx ===> xxx - это 3-значные милисекунды, которые я хочу показать.

и как добавить 3-значные милисекунды после H: i: s

Пожалуйста, помогите мне .....

Ответы [ 5 ]

7 голосов
/ 12 февраля 2012

Как насчет этого?

$mil = 1328910295939;

function toTimestamp($milliseconds)
{
    $seconds = $milliseconds / 1000;
    $remainder = round($seconds - ($seconds >> 0), 3) * 1000;

    return date('Y:m:d H:i:s.', $seconds).$remainder;
}

echo toTimestamp($mil);

Тадаа!

Это тоже должно быть довольно быстро.

Кроме того, это вывод:почему вы не используете - для определения даты часть бьет меня.

5 голосов
/ 11 февраля 2012

Просто обрежьте последние два символа:

substr(date('Y-m-d H:i:s.u',1328910295939), 0, -2)
4 голосов
/ 11 февраля 2012

Вот функция, которая сделает это для вас точно (округляя, а не обрезая):

function getTimestamp()
{
        $microtime = floatval(substr((string)microtime(), 1, 8));
        $rounded = round($microtime, 3);
        return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded));
}

Пояснение:

microtime () возвращает 2 числа в виде 1 строки, разделенной пробелом. 2-е число - это количество секунд с начала эпохи Unix, а 1-е число - это количество микросекунд с 2-го числа. По сути, первое число - это количество микросекунд, выраженное в формате с точностью 8 (0,00000000), а конечные 0 никогда не обрезаются.

Мы округляем это значение с точностью до 3 (0,00), обрезаем начальный 0 и добавляем его к фактической отметке времени.

По какой-то причине php doc для вас, микросекунды, похоже, на самом деле не поддерживается. Я получаю 0,000 каждый раз при использовании этого метода. Поэтому я прибегнул к microtime () в качестве решения для резервного копирования.

1 голос
/ 12 февраля 2012
$t = 1328910295939;
echo date('Y-m-d H:i:s.', substr($t, 0, -3)) . substr($t, -3);

Выход: 2012-02-10 16:44:55.939 (зависит от часового пояса)

0 голосов
/ 09 октября 2012

Поскольку все эти ответы были довольно забавными по своей сложности, вот еще один ответ для будущего потомства, который использует исходный код спрашивающего и не рассматривает числа как строки.

$mil = 1328910295939;
$seconds = floor($mil / 1000);
$fraction = $mil % 1000;
$showdate = date('Y:m:d H:i:s',$seconds) . ".$fraction";

echo "$mil<br>
$seconds<br>
$fraction<br>
$showdate";

Выводит следующее на сервере, настроенном на часовой пояс EST:

1328910295939
1328910295
939
2012:02:10 16:44:55.939
...