首页  >  文章  >  后端开发  >  当以毫秒为单位设置 m-d-Y H:i:s.u 格式的日期时,为什么微秒字段显示 000000?

当以毫秒为单位设置 m-d-Y H:i:s.u 格式的日期时,为什么微秒字段显示 000000?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-23 19:52:30514浏览

Why is the Microseconds Field Displaying 000000 When Formatting Dates in m-d-Y H:i:s.u from Milliseconds?

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

在此查询中,目标是将日期字符串格式化为“m-d-Y H:i:” s.u" 来自以毫秒为单位的 Unix 时间戳。但是,结果在微秒字段中始终显示 000000。

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

输出:

07-28-2013 11:26:14.000000

解决方案

要解决此问题,可以使用输入格式“U.u”:

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

输出:

04-13-2015 05:56:22.082300

此方法利用 PHP 手册中的以下格式说明符:

  • U:自 Unix 纪元以来的秒数
  • u:微秒

时区和 microtime()

需要注意的是,如果未明确提供, createFromFormat() 方法通常使用本地时区。但是,由于 microtime() 返回自 UTC 中的 Unix 纪元以来经过的秒数,因此 DateTime 对象隐式初始化为 UTC。

如果需要显示特定时区的时间,则必须设置在初始 DateTime 创建后使用 setTimeZone():

<code class="php">$now->setTimeZone(new DateTimeZone('America/New_York'));</code>

输入到 MySQL

要将格式化的日期字符串输入到 MySQL,格式应修改为:

<code class="php">format("Y-m-d H:i:s.u")</code>

以上是当以毫秒为单位设置 m-d-Y H:i:s.u 格式的日期时,为什么微秒字段显示 000000?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn