首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHPs date()函数的16位时间戳

使用PHPs date()函数的16位时间戳
EN

Stack Overflow用户
提问于 2011-01-15 17:31:12
回答 1查看 2.3K关注 0票数 1

如何在PHP的date()函数中使用下面的16位时间戳(来自XML文件)?

代码语言:javascript
运行
复制
1295076698126000  // 15-01-2011 08:31:38.126
1286697695521000  // 10-10-2010 10:01:35.521
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-15 17:37:55

这些时间戳以微秒为单位。但是,由于date()使用整数表示时间戳(以秒为单位),因此您将无法获得微秒值。您仍然可以通过将时间戳除以一百万(一百万微秒=1秒)并将商传递给date()来打印日期的其余部分

代码语言:javascript
运行
复制
// "u" will always be printed as 000000 regardless of actual microseconds
echo date('d-m-Y H:i:s.u', 1295076698126000 / 1000000);

EDIT: Hacky,但您可以执行手动算术来获得毫秒数,并将其作为解决办法单独输出,如下所示:

代码语言:javascript
运行
复制
$xml_timestamp = 1295076698126000;
$seconds = $xml_timestamp / 1000000;
$microseconds = $seconds - floor($seconds);
$seconds = floor($seconds);

// 1 millisecond = 1000 microseconds
// Milliseconds, because your desired output is 3 decimal places long, not 6
$milliseconds = round($microseconds * 1000);

$format = 'd-m-Y H:i:s.' . sprintf('%03d', $milliseconds);
echo date($format, $seconds);

为了提高可重用性,DateTime类是一个很好的选择。或者,自定义函数:

代码语言:javascript
运行
复制
function date_milliseconds($format, $timestamp = NULL) {
    $seconds = ($timestamp === NULL) ? microtime(true) : $timestamp / 1000000;
    $microseconds = $seconds - floor($seconds);
    $seconds = floor($seconds);
    $milliseconds = round($microseconds * 1000);

    $format = preg_replace('/(?<!\\\\)u/', sprintf('%03d', $milliseconds), $format);
    return date($format, $seconds);
}

echo date_milliseconds('d-m-T H:i:s.u', floatval($xml_timestamp));
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4698862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档