Create 3 digit Millisecond with php

谁说胖子不能爱 提交于 2019-12-08 20:46:40

问题


I have 13 digit number and want to create date and time with include milisecond

Example code is like this this is my php script

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

echo "$showdate";

the result is like this 2012:02:10 15:44:55.xxx ===> xxx is 3 digit miliseconds that i want to show up.

and how to include with 3 digit milisecond after H:i:s

Please help me.....


回答1:


How about something like this?

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

Tadaa!

It should be pretty quick too.

Also, this is the output: 2012:02:10 15:44:55.939 - why you're not using - for delimiting the date portion beats me.




回答2:


Just trim off the last two characters:

substr(date('Y-m-d H:i:s.u',1328910295939), 0, -2)



回答3:


Here's a function that will do it for you accurately (by rounding, not cutting off):

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

Explanation:

microtime() returns 2 numbers as 1 string, delimited by a space. the 2nd number is the amount of seconds since the unix epoch, and the 1st number is the amount of microseconds since the 2nd number. Basically, the first number is the amount of microseconds expressed in a 8 precision format (0.00000000) and trailing 0s are never cut off.

We round this to a precision of 3 (0.00), and cut off the leading 0, and append that to the actual timestamp.

For some reason the php doc for u, microseconds, doesn't seem to be actually supported. I get 0.000 everytime when using that method. So I resorted to microtime() as a backup solution.




回答4:


$t = 1328910295939;
echo date('Y-m-d H:i:s.', substr($t, 0, -3)) . substr($t, -3);

Output: 2012-02-10 16:44:55.939 (it depends on the timezone)




回答5:


Because these answers were all quite amusing in their complexity, here's yet another answer for future posterity that uses the asker's original code and doesn't treat numbers as strings.

$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";

Outputs the following on a server set to the EST time zone:

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


来源:https://stackoverflow.com/questions/9242840/create-3-digit-millisecond-with-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!