用php创建3位数毫秒

问题描述 投票:0回答:7

我有 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 位毫秒

请帮助我......

php date time microtime
7个回答
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
- 为什么你不使用 - 来界定日期部分打败了我。


5
投票

只需剪掉最后两个字符:

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

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,并将其附加到实际时间戳。

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


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
(取决于时区)


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

0
投票

由于我无法向 @westie 添加注释,如果有人需要这个,我允许自己将缺失的行添加到他的小数函数中 < 100 :

    $seconds = $milliseconds / 1000;
    $remainder = round($seconds - ($seconds >> 0), 3) * 1000;
    $remainder = sprintf("%03d", $remainder);
    return gmdate('H:i:s.', $seconds).$remainder;

请注意,我还使用

gmdate
来防止时区问题(我想您会在毫秒上进行持续时间计算而不是日期计算)


0
投票

自 PHP

5.2.0
起,您可以使用 DateTime() 类:

$date = new DateTime(null, new DateTimeZone('Asia/Dhaka'));
echo $date->format('Y-m-d H:i:s.v')

输出:

2024-02-15 15:42:51.034

© www.soinside.com 2019 - 2024. All rights reserved.