从毫秒获取日期格式 m-d-Y H:i:s.u

2022-08-30 06:55:13

我正在尝试获取格式化的日期,包括以毫秒为单位指定的UNIX时间戳的微秒。

唯一的问题是我不断得到000000,例如

$milliseconds = 1375010774123;
$d = date("m-d-Y H:i:s.u", $milliseconds/1000);
print $d;

07-28-2013 11:26:14.000000


答案 1

您可以使用 输入格式 。U.u

$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");

这将生成以下输出:

04-13-2015 05:56:22.082300

从 PHP 手册页中查看日期格式:

  • U = 自 Unix 时代以来的秒数
  • u = 微秒

http://php.net/manual/en/function.date.php


感谢giggsey指出了我原始答案中的一个缺陷,添加到行中应该可以修复确切的秒的情况。太可惜了,它不再感觉那么优雅了......number_format()

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));

http://php.net/manual/en/function.number-format.php


响应 DaVe 的时区说明。

通常,如果未指定本地时区,则该方法将使用本地时区。createFromFormat()

http://php.net/manual/en/datetime.createfromformat.php

但是,此处描述的技术是初始化 DateTime 对象,该对象返回自 Unix 时代(1970 年 1 月 1 日 00:00:00 GMT)以来经过的秒数。microtime()

http://php.net/manual/en/function.microtime.php

这意味着 DateTime 对象被隐式初始化为 UTC,这对于只想跟踪经过时间的服务器内部任务来说很好。

如果您需要显示特定时区的时间,则需要相应地进行设置。但是,由于上述原因,这应该作为初始化后的单独步骤(不使用 的第三个参数)来完成。createFromFormat()

该方法可用于完成此要求。setTimeZone()

http://php.net/manual/en/datetime.settimezone.php

例如:

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
echo $now->format("m-d-Y H:i:s.u") . '<br>';

$local = $now->setTimeZone(new DateTimeZone('Australia/Canberra'));
echo $local->format("m-d-Y H:i:s.u") . '<br>';

生成以下输出:

10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818

请注意,如果要输入到 mysql 中,时间格式需要为:

format("Y-m-d H:i:s.u")

答案 2

php.net 说:

微秒(在 PHP 5.2.2 中添加)。请注意,将始终生成,因为它需要一个整数参数,而如果是用微秒创建的,则支持微秒。date()000000DateTime::format()DateTime

所以使用简单:

$micro_date = microtime();
$date_array = explode(" ",$micro_date);
$date = date("Y-m-d H:i:s",$date_array[1]);
echo "Date: $date:" . $date_array[0]."<br>";

推荐并使用引用的类:dateTime()

$t = microtime(true);
$micro = sprintf("%06d",($t - floor($t)) * 1000000);
$d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );

print $d->format("Y-m-d H:i:s.u"); // note at point on "u"

注意是微秒(1 秒 = 1000000 μs)。u

php.net 的另一个例子:

$d2=new DateTime("2012-07-08 11:14:15.889342");

php.net 上的参考资料dateTime()

我已经回答了简短和简化的作者的问题。请参阅作者的更多信息:从毫秒获取日期格式 m-d-Y H:i:s.u


推荐