8

我有 13 位数字,想创建包含毫秒的日期和时间

示例代码是这样的 这是我的 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 位数毫秒。

以及如何在 H:i:s 之后包含 3 位毫秒

请帮我.....

4

5 回答 5

10

这样的事情怎么样?

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

多多!

它也应该很快。

此外,这是输出:2012:02:10 15:44:55.939- 为什么你不使用 - 用于分隔日期部分击败了我。

于 2012-02-11T20:39:48.967 回答
5

只需剪掉最后两个字符:

substr(date('Y-m-d H:i:s.u',1328910295939), 0, -2)
于 2012-02-11T18:31:25.987 回答
4

这是一个可以为您准确完成的功能(通过四舍五入,而不是截断):

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 个字符串返回,由空格分隔。第二个数字是自 unix 纪元以来的秒数,第一个数字是自第二个数字以来的微秒数。基本上,第一个数字是以 8 位精度格式 (0.00000000) 表示的微秒数,后面的 0 永远不会被截断。

我们将其四舍五入到 3 (0.00) 的精度,并切断前导 0,并将其附加到实际时间戳。

出于某种原因,你的 php 文档,微秒,似乎实际上并不受支持。每次使用该方法时,我都会得到 0.000。所以我求助于 microtime() 作为备份解决方案。

于 2012-02-11T18:50:50.557 回答
1
$t = 1328910295939;
echo date('Y-m-d H:i:s.', substr($t, 0, -3)) . substr($t, -3);

输出:(2012-02-10 16:44:55.939 取决于时区)

于 2012-02-11T21:28:30.617 回答
0

因为这些答案的复杂性都非常有趣,所以这里有另一个使用提问者的原始代码并且不将数字视为字符串的未来后代的答案。

$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
于 2012-10-09T14:27:23.743 回答